码迷,mamicode.com
首页 > 其他好文 > 详细

剑指 Offer 24. 反转链表

时间:2020-07-29 14:40:11      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:方式   public   temp   lis   防止   输出   处理   loading   设置   

题目:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
**示例
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

方式一:

迭代法(头插法):
画图分析:设置一个前节点为null,再用临时变量保存当前节点的下一个节点,然后将当前节点的下一节点指向设置的前一节点,最后将前一节点后移,当前节点后移。
技术图片

代码一:

  public static ListNode reverseList(ListNode head) {
    if(head==null||head.next==null){
        return head;
    }

    ListNode prev=null;//当前节点的前一节点
    ListNode curr=head;//当前节点
    while(curr!=null){
        ListNode temp=curr.next;//临时变量存当前节点的下一个节点
        curr.next=prev;//当前指针指向它前面的节点
        prev=curr;//指针后移
        curr=temp;//指针后移,处理下一个节点

    }
    return prev;
  }

方式二:

递归法:
先反转后面的链表,从最后两个节点开始反转,依次向前,将后一个节点指向前一个节点,再讲前一个节点指针域置为空,表示将原链表中前一个节点指向后一个节点的指向关系断开。

代码二:

  public ListNode reverseList(ListNode head) {
    //递归结束
    if(head==null||head.next==null){
        return head;
    }

    ListNode newNode=reverseList(head.next);

    head.next.next=head;
    head.next=null;//防止链表循环
    return newNode;
}

剑指 Offer 24. 反转链表

标签:方式   public   temp   lis   防止   输出   处理   loading   设置   

原文地址:https://www.cnblogs.com/ghlz/p/13396169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!