标签:pre head ListNode cur 递归 206 st 链表 Leetcode
Leetcode 206.反转链表 迭代递归栈
原题链接:https://leetcode-cn.com/problems/reverse-linked-list/
迭代法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre = NULL;
ListNode* cur = head;
while (cur) {
ListNode* rear = cur->next;
cur->next = pre;
pre = cur;
cur = rear;
}
return pre;
}
};
递归法
- 理解递归的返回值的回溯(本节必看重点)(本人最重要的收获)
- 写递归函数应思考的
- 第一,递归的参数
- 第二,递归的停止判断
- 第三,递归的返回值(最难最重要)
class Solution {
public:
ListNode* reverse(ListNode* pre, ListNode* cur) {
if (cur == NULL) return pre;
ListNode* tmp = cur->next;
cur->next = pre;
return reverse(cur,tmp);
//理解,递归的特性,把最后函数的pre给逐级回溯回去,就是说只返回最后一个函数返回的
}
listNode* reverseList(ListNode* head) {
return reverse(NULL, head);
}
};
栈
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == NULL) return head;
stack<ListNode*>st;
while (head != NULL) {
st.push(head);
head = head->next;
}
head = st.top();
while (!st.empty()) {
ListNode* pre = st.top();
st.pop();
pre->next = st.empty() ? NULL : st.top();
}
return head;
}
};
标签:pre,head,ListNode,cur,递归,206,st,链表,Leetcode 来源: https://blog.csdn.net/weixin_60468770/article/details/122379137
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。