單鏈表操作 排序,拆分,刪除最大值

2021-10-05 06:26:47 字數 1538 閱讀 1300

1.單鏈表拆分:

**題如下:**對於乙個帶頭結點的單鏈表l=,現將單鏈表拆分成兩個鍊錶:l1=;l2=;其中l1沿用原節點l,l2則新建節點。

**思路分析:**對於所有a節點,依次指向下乙個a節點,對於b節點,則採用頭接法依次接入l2鍊錶。

**如下:

#include

#include

struct sqlist

;sqlist *l,

*l2=new sqlist;

//建立l與l2節點,此處採用c++的方法,也可以寫成sqlist *l2=(sqlist *)malloc(sizeof(sqlist));

sqlist *

creat

(int a)

p->next=

null

;return head;

}void

cf(sqlist *

&l,sqlist *

&l2)

}void

show

(sqlist *head)

}int

main()

;//演示陣列,將0之前的所有元素生成單鏈表。

l=creat

(array)

;printf

("l的輸出結果是:\n");

show

(l);

cf(l,l2)

;printf

("拆分後l與l2的結果分別是:\n");

show

(l);

show

(l2)

;// system("pause");//由於dev c++崩了,只能在vc 6.0上執行,為了觀察結果寫的暫停。

return0;

}

2.刪除最大值。

**題意簡介:**若要刪除鍊錶最大值,且考慮程式執行效率,可以模仿陣列,找到最大值對應的「下標」。設定max節點,儲存最大值對應的節點,mpre儲存最大節點的前導節點,隨後mpre->next=max->next;delete(max);

**如下://僅為功能函式對應部分,可以套入上面的框架中進行驗證。

void

deletemax

(sqlist *

&l) pre=p;

p=p->next;

} mpre->next=max->next;

delete

(max)

;}

3.單鏈表排序

**問題:**對於一給定的鍊錶(保底有乙個元素),在不借助其他儲存結構的情況下,對該鍊錶進行遞增排序。

**思路解析:**對於該鍊錶,先構造乙個只有乙個元素的有序鍊錶,對於剩下的部分,逐個與有序鍊錶對比,將其插入有序鍊錶當中。

void

sortsq

(sqlist *

&l)}

6 4 單鏈表最大值 20分

本題要求求出單鏈錶值最大的結點並返回。要求實現兩個函式。函式介面定義 建立單鏈表並返回單鏈表的頭指標 struct node buildlinkedlist int arr,int n 求單鏈錶值最大的結點,返回指向最大值結點的指標。若單鏈表為空,則返回null。struct node getmax...

PTA 6 1 求單鏈表最大值

6 1 求單鏈表最大值 6分 本題要求實現乙個函式,返回帶頭結點的單鏈表中最大元素的位址。函式介面定義 linklist maxp linklist l l是帶頭結點的單鏈表的頭指標,函式maxp返回表中最大元素的位址。如果單鏈表為空,返回空指標。其中linklist結構定義如下 typedef s...

求單鏈表的最大值與原地逆轉

資料結構鍊錶一章已學習完畢,因此編了乙個程式用以實現鏈式表的構建,插入,查詢,求最大值,以及原地逆轉。除了求最大值與原地逆轉之外都是常規操作,不再贅述,著重分析最大值與逆轉的演算法。一 最大值的求解 通過max函式實現,定義結構體指標p指向l的首元節點,max初值為p data,通過if判斷是否有更...