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