C语言如何实现链表的拷贝
时间: 2023-07-27 07:13:01 浏览: 544
C语言实现 链表操作
5星 · 资源好评率100%
链表的拷贝可以通过遍历原链表,逐个复制节点,然后创建新节点并将其加入到新链表中来实现。
具体步骤如下:
1. 创建一个新链表的头节点new_head和当前节点new_node,将new_head的指针域置为NULL。
2. 遍历原链表的每个节点,复制其数据域,并创建一个新节点new_node,将其指针域置为NULL。
3. 将新节点new_node插入到新链表中,即将其加入到new_head之后。
4. 将new_node指向新链表的下一个节点。
5. 重复步骤2-4,直到遍历完整个原链表。
6. 返回新链表的头节点new_head。
以下是C语言代码示例:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
}Node;
// 链表复制
Node* copyList(Node* head)
{
Node* new_head = (Node*)malloc(sizeof(Node)); // 创建新链表的头节点
new_head->next = NULL;
Node* cur = head->next; // 当前节点指向原链表的第一个节点
while (cur != NULL)
{
Node* new_node = (Node*)malloc(sizeof(Node)); // 创建新节点
new_node->data = cur->data; // 复制节点数据
new_node->next = NULL;
// 插入新节点到新链表中
Node* p = new_head;
while (p->next != NULL)
{
p = p->next;
}
p->next = new_node;
cur = cur->next; // 指向原链表的下一个节点
}
return new_head;
}
// 测试代码
int main()
{
Node* head = (Node*)malloc(sizeof(Node)); // 创建原链表的头节点
head->next = NULL;
Node* p = head;
// 添加原链表的节点
for (int i = 1; i <= 5; i++)
{
Node* node = (Node*)malloc(sizeof(Node));
node->data = i;
node->next = NULL;
p->next = node;
p = p->next;
}
printf("原链表:\n");
p = head->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
Node* new_head = copyList(head); // 复制链表
printf("新链表:\n");
p = new_head->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
阅读全文