假设单链表结点结构类型定义如下: struct LNode{ int data; LNode *next; }; 已知两个带头结点的元素为整型数据的单链表的头指针分别为head1和head2,依下面三种要求分别写一算法void Link (LNode *head1, LNode *head2),将其链在一起成为一个带头结点的单链表,要求第二个单链表链在第一个的后面。要求写一新建的head作为链接后单链表的头结点,不破坏原来的两单链表的结点,产生新链表的方式进行链接。
时间: 2024-03-20 10:39:56 浏览: 146
【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结。。。 定义线性表节点的结构.pdf
算法1:
```c++
void Link(LNode *head1, LNode *head2){
LNode *p = head1;
while(p->next != NULL){
p = p->next;
}
p->next = head2->next;
}
```
算法2:
```c++
void Link(LNode *head1, LNode *head2){
LNode *p = head1;
while(p->next != NULL){
p = p->next;
}
LNode *q = head2->next;
while(q != NULL){
LNode *temp = new LNode();
temp->data = q->data;
temp->next = NULL;
p->next = temp;
p = p->next;
q = q->next;
}
}
```
算法3:
```c++
void Link(LNode *head1, LNode *head2){
LNode *newHead = new LNode();
LNode *p = newHead;
LNode *q1 = head1->next;
LNode *q2 = head2->next;
while(q1 != NULL && q2 != NULL){
if(q1->data <= q2->data){
p->next = q1;
q1 = q1->next;
} else {
p->next = q2;
q2 = q2->next;
}
p = p->next;
}
if(q1 == NULL){
p->next = q2;
} else {
p->next = q1;
}
head1->next = newHead->next;
}
```
以上三个算法实现的功能都是将head2链表接在head1链表的末尾,但算法2和算法3是将head2链表中的结点复制一份添加到head1链表中,而不是直接将head2链表接在head1链表的末尾。
阅读全文