day3
思路:1. 双指针
需要注意的点有四个:
1.两个指针的初始化 cur = head pre = null
2.循环的终止条件
3.temp来存储反转之前cur的下一个结点
4.移动两个指针的顺序 先移动pre 后移动cur 否则,pre将找不到cur的位置。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
// 直接改向
ListNode* cur = head;
ListNode* pre = NULL;
while(cur)
{
ListNode* temp = cur->next; // 存储反转前结点的指向
cur->next = pre; // 转向操作
// 指针移动的操作
pre = cur; // 先pre
cur = temp;
}
return pre;
}
};
2.递归
用递归的思路其实和双指针一样,只是写法不一样。
class Solution {
public:
ListNode* rL(ListNode* cur,ListNode* pre)
{
if(cur == NULL)
return pre;
ListNode* temp = cur->next;
cur->next = pre;
return rL(temp,cur); // 双指针向前移一位
}
ListNode* reverseList(ListNode* head) {
return rL(head,NULL); // 初始化
}
};