给定一个带头结点的单链表,编写算法将其原地逆置。所谓“原地”是指空间复杂度为O(1)
时间: 2024-05-13 14:14:23 浏览: 103
单链表逆置-第2章 线性表
可以使用三个指针prev、cur、next来实现原地逆置。
具体的步骤如下:
1. 初始化三个指针prev、cur、next,分别指向头结点、头结点的下一个节点和下一个节点的下一个节点。
2. 将头结点的next指向NULL,表示新的尾节点已经确定。
3. 将cur节点的next指向prev节点,实现节点的逆置。
4. 将prev、cur、next三个指针依次向后移动一位,即prev=cur,cur=next,next=next->next。
5. 重复步骤3和步骤4,直到next指向NULL,表示链表已经逆置完成。
下面是C++代码实现:
```
void reverseList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return;
}
ListNode* prev = head;
ListNode* cur = head->next;
ListNode* next = cur->next;
prev->next = NULL;
while (next != NULL) {
cur->next = prev;
prev = cur;
cur = next;
next = next->next;
}
cur->next = prev;
head->next = cur;
}
```
需要注意的是,这里需要考虑特殊情况,如链表为空或只有一个节点的情况。
阅读全文