题目描述:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
示例:
输入: 1->2->3->4->NULL
输出: 4->3->2->1->NULL
双指针法
定义两个指针cur,pre(一左一右)
初始化cur为空,初始化pre指向头节点
在每一轮循环中:
1、用临时指针N保存pre->next,防止链表提前断开
2、让pre的next指向cur
3、将pre和cur都向链表原方向 移动一个节点
当pre为空时,链表反转完成,此时cur指向原链表的最后一个节点
代码如下:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = NULL, *pre = head;
while (pre != NULL) {
ListNode* N = pre->next;
pre->next = cur;
cur = pre;
pre = N;
}
return cur;
}
};