已知一个单链表,编写一个C语言函数将该单链表复制一个拷贝
时间: 2024-10-16 14:16:29 浏览: 30
在C语言中,你可以通过遍历原链表并逐个节点添加到新链表中来实现单链表的复制。这里是一个简单的函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data;
newNode->next = NULL;
}
return newNode;
}
// 复制链表
Node* copyList(Node* head) {
if (head == NULL) {
return NULL; // 如果链表为空,直接返回NULL
}
Node* newHead = createNode(head->data); // 复制第一个节点
Node* current = head;
while (current != NULL) { // 遍历原链表
Node* newNode = createNode(current->data);
newNode->next = newHead->next; // 新节点的下一个指针指向旧链表的新位置
newHead->next = newNode; // 更新新链表的头节点
newHead = newHead->next; // 移动新链表头部指针
current = current->next;
}
return newHead;
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 实例化一个链表并创建它的副本
Node* originalList = ... // 初始化你的链表
Node* copiedList = copyList(originalList);
// 打印原链表和复制后的链表
printList(originalList);
printList(copiedList);
return 0;
}
```
这个`copyList`函数首先检查链表是否为空,然后创建一个新的头节点,接着遍历原链表,每次迭代都会创建一个新的节点,并将其插入到新链表的适当位置。当遍历完原链表后,函数返回新链表的头节点。
注意:这个例子假设你已经有了初始化好的`originalList`链表,你需要根据实际链表的构建来替换这部分代码。
阅读全文