本次写的题目是反转链表,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎
首先第一眼看到题目,我们要做到的是把这个链表翻转,在做数据结构题目的时候,我们重要的解题手段之一就是画图❗❗ 所以下面先做出一个图来康康👇
要改变链表的顺序,就是要改变节点的链接,也就是改变各节点上的next域, 先创建两个节点(cur,next)来试一下可不可以将这个链表翻转👇
在经过尝试之后我们发现,仅仅用两个节点来将链表翻转是做不到的,因为我们只用两个节点,一个用于记录当前要改的节点,一个用于记录前一个位置的节点,那么就差了一个节点记录之后的位置。当我们把当前位置的节点链接上一个节点之后,就与原本链表中的下一位置的节点断连了❌
那么如果尝试用三个节点嘞?一个用于记录前一节点(就用head代替),一个用于记录当前节点(cur),一个用于记录下一节点(next)画图试一下👇
大成功!😎可行,说明我们分析的使用三个节点是莫得问题的,那么就正式进入到代码阶段。
每次写代码都不要忘记特殊情况,由于用到了三个节点,且其中两个节点一个在第二个节点上,另一个节点在第三个节点上,所以要提前分析下面两种情况,以免出现空指针异常的情况:①头指针为null;②头指针的next为null;
针对上面两种情况,我们可以用下面代码解决:
- if(head==null) return null; //当头指针为null,我们直接返回null
- if(head.next==null) return head; //当头指针的next为null,即整个链表只有一个节点的时候,直接返回该头结点
在确认头节点以及第二个节点存在后,我们才能够创建cur与next节点,用于记录当前节点和下一位置节点。
- class Solution {
- public ListNode reverseList(ListNode head) {
- if(head==null) return null;
- if(head.next==null) return head;
- ListNode cur = head.next;
- ListNode next = head.next.next;
- }
- }
之后就是真正的反转链表环节,然而我们要反转链表,就需要使用到while语句来遍历整个数组,那么限定条件是什么🧐:
再通过用图演示一遍后发现,当next节点为null的时候,我们就可以停止了,然后单独对最后剩下的两个节点进行翻转,就可以完成整条链表的翻转了。这里博主就不另外作图解释了,各位老师们可以自己试一下自己作图演示,会更加加深记忆与理解的😎
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
翻转阶段按照下面的话进行编写代码就可以了(其实也是上面的演示动图中的话)👇
cur用于记录当前节点,来链接上一个节点达到翻转目的,翻转完之后head就到cur的位置上,cur再跑去下一个节点的位置上(即next节点的位置上),然后记录下一个位置节点的next节点进行往下一个节点跑
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
换成代码语言👇:
- class Solution {
- public ListNode reverseList(ListNode head) {
- if(head==null) return null;
- if(head.next==null) return head;
- ListNode cur = head.next;
- ListNode next = head.next.next;
- head.next = null;
- while(next!=null){
- cur.next = head;
- head = cur;
- cur = next;
- next = next.next;
- }
- cur.next = head;
- head = cur;
- return head;
- }
- }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
至此,代码算是完成啦😎跑来逝逝吧😎
nice😎✨
以上!便是全部的啦😎
又是收获满满的一天~