头插法反转链表c++
时间: 2023-11-03 11:03:27 浏览: 156
头插法是一种反转链表的方法,它通过将当前节点插入到已经反转的部分链表的头部来实现反转。具体步骤如下:
1. 创建一个虚拟头节点dummy,并将其next指针指向原链表的头节点head。
2. 创建一个pre指针,初始时指向虚拟头节点dummy。
3. 使用循环遍历到达需要反转的区间的前一个节点pre。
4. 创建一个指针p,初始时指向pre的下一个节点。
5. 使用循环将p节点插入到pre节点之后,并更新p节点的next指针和pre节点的next指针。
6. 循环完成后,返回dummy节点的next指针,即为反转后的链表头节点。
以下是可以参考的C++代码示例:
```cpp
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode* dummy = new ListNode(-1);
dummy->next = head;
ListNode* pre = dummy;
for (int i = 1; i < left; i++) {
pre = pre->next;
}
ListNode* p = pre->next;
ListNode* tmp;
for (int i = left; i < right; i++) {
tmp = p->next;
p->next = tmp->next;
tmp->next = pre->next;
pre->next = tmp;
}
return dummy->next;
}
};
```
阅读全文