zoukankan      html  css  js  c++  java
  • 剑指 Offer 24. 反转链表

    题目:

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
    **示例
    输入: 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;
    }
  • 相关阅读:
    php类和对象: 类常量
    类和对象:静态属性、静态方法
    类和对象: 构造方法
    类和对象:成员属性、成员方法 — 学习笔记3
    类和对象:创建对象
    类和对象:类与对象定义
    可扩展定制可复用的倒计时插件
    SeaJS入门
    JS可复用的多条件筛选插件
    谁说转载的文章用户就不喜欢了?
  • 原文地址:https://www.cnblogs.com/ghlz/p/13396169.html
Copyright © 2011-2022 走看看