剑指Offer:反转链表
Posted fabaogege
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer:反转链表相关的知识,希望对你有一定的参考价值。
剑指Offer:反转链表
由于链表具有天然的递归结构,反转链表其实很容易想到递归的方式。这里暂不说了。说一下非递归的方式
非递归的方式
由于链表的next维持关系链的关键。反转的过程就需要用额外的指针指向当前节点的前一节点和后一节点,不然的话就会发生断链了。
图示:
具体步骤伪代码可为:
1. pNext指向当前节点的next以保持链 pNext = current.next;
2.当前节点的nextf指向前一节点(开始反转)current.next = prev
3. prev 指针指向当前指针(即往后)prev = current
4. 当前的指针也往后 current = pNext;
步骤繁琐点帮助理解,其实当前节点的指针其实就是head节点了。
代码:
public class Solution { public ListNode reverseList(ListNode head) { //空判断 if(head == null) return head; //3个节点分别指向前一节点,当前节点,下一节点。 ListNode prev = null; ListNode current = head; ListNode pNext; //结束条件就是current节点成为了null时,那么prev节点就成为反转后的头节点了。 while(current!=null){ pNext = current.next; current.next = prev; prev = current; current = pNext; } return prev; } }
递归的方式
public class Solution { public ListNode reverseList(ListNode head) { if(head==null||head.next ==null) return head; ListNode prev = reverseList(head.next); head.next.next = head; head.next = null; return prev; } }
gitHub源码:反转链表
图片来源:https://www.cnblogs.com/csbdong/p/5674990.html
以上是关于剑指Offer:反转链表的主要内容,如果未能解决你的问题,请参考以下文章