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;
    }
  • 相关阅读:
    HTML5基础内容(二)
    JavaScript逻辑运算符
    JavaScript自增运算符和自减运算符
    JavaScript算数运算符和一元运算符
    CSS分页
    HTML和CSS遇到的细节问题
    JavaScript数据类型转换
    JavaScript标识符
    HTML5基础知识汇总(一)
    CSS颜色透明度
  • 原文地址:https://www.cnblogs.com/ghlz/p/13396169.html
Copyright © 2011-2022 走看看