C语言要求实现一个函数,将带头节点链表source复制到链表dest(带头节点中)
时间: 2024-10-08 17:08:55 浏览: 32
在C语言中,你可以通过创建一个新的头结点,并递归地遍历源链表source,将每个节点添加到目标链表dest中来实现链表的复制。这里是一个简单的步骤描述:
1. 定义一个新的头结点`newHead`,并将其指针初始化为空,这将是复制后的链表的新头部。
2. 遍历源链表`source`:
- 对于源链表的当前节点`current`,如果它不是第一个节点(即`source->next != NULL`),那么在目标链表`dest`上也需要插入一个新节点。
- 创建一个新的节点`newNode`,并将其数据设置为`current->data`,然后将它的下一个指针指向`dest->next`。
- 将`dest->next`指向`newNode`。
- 如果`source->next`是非空,继续处理下一个节点;否则,停止。
3. 最后,将`dest->next`设置为`newHead`,因为`newNode`现在成了新的头节点。
这是一个基本的实现思路,具体的代码需要考虑指针的操作以及内存管理。下面是伪代码形式:
```c
struct ListNode* copyList(struct ListNode* source) {
if (source == NULL) return NULL;
// 创建新头结点
struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
newHead->data = source->data; // 设置新头结点的数据
newHead->next = dest->next; // 新头结点的next指向原头结点的next
// 递归复制剩余部分
struct ListNode* temp = source->next;
source->next = newHead;
dest->next = copyList(temp);
return dest;
}
```
阅读全文