1. 程式人生 > >真題2002 兩個帶頭結點單鏈表的連線

真題2002 兩個帶頭結點單鏈表的連線

真題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))
(王道書籍)演算法思想: