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判斷是否有更...