本文主要是介绍反转链表(leetcode 206),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
迭代核心逻辑:
原链表的新的下一个结点,作为新反转链表的头结点
代码分析:
初始化prev为nullptr(之后是作为反转后链表的最后一个结点),
遍历原链表时保存当前结点的下一个结点,将curr的next结点作为prev,而prev为curr,
然后curr本身作为下一个结点依次遍历
(等于是将原链表的新的下一个结点作为新反转链表的头结点。)
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode* prev = nullptr;ListNode* curr = head;while (curr) {ListNode* next = curr->next;curr->next = prev;prev = curr;curr = next;}return prev;}
};
递归核心逻辑:
每次递归反转由当前节点和其下一个节点组成的子链表
代码分析:
整个过程是通过递归地将每个节点与其下一个节点之间的连接反转,然后在逐层回溯的过程中更新并返回当前子链表的头节点,直至整个链表被反转。这个过程最终返回的是最后一个节点,它在反转过程中成为了新的头节点
class Solution {
public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead = reverseList(head->next);head->next->next = head;head->next = nullptr;return newHead;}
};
这篇关于反转链表(leetcode 206)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!