要求实现一个函数,将带头结点链表source复制到链表dest(带头结点)c语言
时间: 2024-10-18 17:16:50 浏览: 30
在C语言中,如果你需要将一个带头节点的链表 `source` 复制到另一个头节点已存在的链表 `dest`,你可以采用遍历源链表并在适当位置插入新节点的方式实现。这里是一个简单的步骤描述:
1. 定义一个新的结构体Node,包含数据域data和指向下一个节点的指针next。
2. 创建一个辅助函数,用于复制单个节点,它接收源节点和目标链表作为输入。
```c
struct Node* copyNode(struct Node* source) {
if (source == NULL) return NULL;
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = source->data;
newNode->next = copyNode(source->next);
return newNode;
}
```
3. 主函数中,遍历源链表,每次调用copyNode()创建新的节点,并将其添加到目标链表的相应位置。
```c
void copyList(struct Node* dest, struct Node* source) {
while (source != NULL) {
// 创建新节点并连接到dest链表
struct Node* newNode = copyNode(source);
newNode->next = dest->next; // 将新节点放在dest的后面
dest->next = newNode; // 更新dest的next指针
dest = newNode; // 移动dest到新节点
source = source->next; // 移动source到下一个节点
}
}
```
4. 最后,在主函数中初始化目标链表的头节点和调用copyList函数。
```c
int main() {
// 初始化源链表和目标链表...
copyList(dest->next, source); // 注意,由于dest的头节点已经存在,所以我们从dest->next开始复制
// 返回0或其他必要操作...
}
```
阅读全文