真题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))
(王道书籍)算法思想:

猜你喜欢

转载自blog.csdn.net/qq_34636222/article/details/83618768