赞
踩
目录
反转链表这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会要求我们写出多种解法来实现这道题目,所以大家需要对这道题目非常熟悉哦!!
本片博客就来详细的讲讲解一下 反转链表的多种实现方法,让我们的面试变的更加顺利!!!
给你 单链表 的头节点
head
,请你反转链表,并返回反转后的链表。
头插这种方法,就是将结点一一地插入到新链表的头前,所以我们需要先去建立出一个新的链表头,也就是我下面的这个【rhead】,通过去遍历原先的链表将这些结点一一转移过去即可
- // 重新创建一个链表,将之前的链表进行头插即可
- struct ListNode* rphead = NULL;
- // 进行指针变换
- struct ListNode* cur = head;
- // 用于保存下一个节点地址
- struct ListNode* newnode = cur->next;
- // 头插
- cur->next = rphead;
- rphead = cur;
- cur = newnode;
完整代码:
- struct ListNode* reverseList(struct ListNode* head)
- {
- // 重新创建一个链表,将之前的链表进行头插即可
- struct ListNode* rphead = nullptr;
- // 进行指针变换
- struct ListNode* cur = head;
- while(cur!=NULL)
- {
- // 用于保存下一个节点地址
- struct ListNode* newnode = cur->next;
- // 头插
- cur->next = rphead;
- rphead = cur;
- cur = newnode;
- }
- return rphead;
- }
三指针的迭代方法,这种方法不需要在去创建一个新的头结点指针,只需要在原先的链表上进行一个操作即可,也就是定义三个指针。
- cur:指向当前链表的头
- nextnode:指向cur的next,一样是用于保存。
- prev:这个的话其实是用来算作链表最后一个结点指向空的。
- ListNode* prev = nullptr;
- ListNode* cur = head;
- ListNode* nextNode = cur->next;
- cur->next = prev;
- prev = cur;
- cur = nextnode;
完整代码:
- class Solution {
- public:
- ListNode* reverseList(ListNode* head)
- {
- // 1. 迭代法
-
- // 定义三个指针
- ListNode* prev = nullptr; // cur 的前一个节点
- ListNode* cur = head;
- // 开始迭代
- while(cur!=nullptr)
- {
- ListNode* nextnode = cur->next; // cur的下一个指针
- cur->next = prev;
- prev = cur;
- cur = nextnode;
- }
- return prev;
- }
- };
我们可以通过迭代的方法来得到递归方法
- class Solution {
- public:
- ListNode* reverse(ListNode* prev, ListNode* cur)
- {
- // 最终结束条件
- if(cur==nullptr)
- {
- return prev;
- }
- ListNode* newnode =cur->next;
- cur->next = prev;
- // 将 cur 作为 prev 传入下一层
- // 将 newnode 作为 cur 传入下一层,改变其指针指向当前 cur
- return reverse(cur,newnode);
- }
- ListNode* reverseList(ListNode* head)
- {
- // 3. 递归法
- return reverse(nullptr,head);
- }
- };
最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关链表翻转的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握
以下就是我对 反转链表 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。