标签:pre ListNode cur 206 next 链表 LeetCode 指针
LeetCode 206.反转链表
思路
1)再定义一个新链表(弊端:容易导致内存空间的浪费)
2)直接对原链表进行操作,改变每个结点的next指针指向的方向,从而实现链表的反转(推荐)
双指针法:定义一个指针cur指向原链表的头结点,再定义一个指针pre初始化为nullptr
Step1:将cur->next结点用临时指针tmp保存一下
Step2:将cur->netx指向pre
Step3:更新cur和pre指针,分别向后移动cur指针和pre指针
Step4:循环步骤1、2、3,循环结束条件:cur为空
递归法:
思路与双指针法类似,不断地将cur指向pre的过程,递归结束条件同样是cur为空,
只不过对cur、pre的初始化写法变了
代码实现
1)双指针法:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *cur = head;
ListNode *pre = nullptr;
while(cur)
{
ListNode *tmp = cur->next;
cur->next = pre;
// 更新cur和pre指针
pre = cur;
cur = tmp;
}
return pre;
}
};
2)递归法
class Solution {
public:
ListNode *reverse(ListNode *pre, ListNode *cur){
if(cur == nullptr) return pre;
ListNode *tmp = cur->next;
cur->next = pre;
return reverse(cur, tmp);
}
ListNode* reverseList(ListNode* head) {
return reverse(nullptr, head);
}
};
标签:pre,ListNode,cur,206,next,链表,LeetCode,指针 来源: https://blog.csdn.net/qq_38052114/article/details/121312082
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。