把一个带头结点的单链表的倒置
时间: 2023-09-04 12:11:09 浏览: 100
对于一个带头结点的单链表,可以通过遍历链表并将每个节点的指针方向倒转来实现倒置。具体步骤如下:
1. 遍历链表,从头节点开始,依次访问每个节点。
2. 对于每个节点,将其指向下一个节点的指针反向指向前一个节点。注意在反转指针之前需要先记录下该节点的下一个节点,否则会导致链表中断。
3. 将头节点的指针指向原链表的最后一个节点,即新链表的头节点。
4. 返回新链表的头节点,完成倒置操作。
以下是示例代码实现:
```
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* p = head->next;
ListNode* q = nullptr;
head->next = nullptr;
while (p) {
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}
return head->next;
}
```
需要注意的是,在倒置过程中需要记录下一个节点和前一个节点,因为指针反向后链表结构发生了改变,如果不记录会导致链表中断。
阅读全文