真題2002 兩個帶頭結點單鏈表的連線
阿新 • • 發佈:2018-11-05
真題2002 兩個帶頭結點單鏈表的連線
題目:設計一個演算法,將一個帶表頭結點的單鏈表Y,連線到另一個帶表頭結點單鏈表X之後。單鏈表的每個結點有兩個域:data和link。要求寫出型別定義。
演算法思想:先找到一個連結串列的尾結點,再與另一個連結串列的頭結點連線
Typedef struct LNode{ Elemtype data; Struct LNode *link; }Lnode;*linklist; linklist link(linklist &X;linklist &Y) //將單鏈表Y連線到X之後,最後返回一個單鏈表 Lnode *p,*q; P=x; //p指向單鏈表的頭結點 While(p->next!=null){ p=p->next; } q=p; //q此時是單鏈表x的尾結點 q->next=Y; //將單鏈表x的尾指標的下一個指向單鏈表頭結點 Return h1; }
(擴充套件題)題目:兩個迴圈單鏈表,連結串列頭指標分別是h1,h2。編寫一個函式將連結串列h2連結到連結串列h1之後,要求連結後的連結串列仍保持迴圈連結串列形式
(本人自做)演算法思想:找到連結串列h1的尾結點,將其連結到h2的頭結點;再將h2的尾結點連結到h1的頭結點。
Linklist link(linklist &h1,linklist &h2){ Linklist *p,*q; //分別是單鏈表h1,h2的尾結點 P=h1; //指標p指向單鏈表h1 While(h1->next!=null){ h1=h1->next; } P=h1; //此時p即為單鏈表h1的尾結點 p->next=h2; //將h1尾結點連結h2頭結點 While(h2->next!=null){ H2=h2-next; } q=h2; //此時q即為單鏈表h2的尾結點 q->next=h1; //將h2尾結點連結h1頭結點 Return h1; //返回以h1為頭結點的單鏈表 }
時間複雜度:O(h1+h2)=O(max(h1,h2))
(王道書籍)演算法思想: