zoukankan      html  css  js  c++  java
  • 剑指Offer-15:反转链表

    题目描述

    输入一个链表,反转链表后,输出新链表的表头。例如链表为1->2->3->4 反转后为1<-2-<3-<4

    节点定义如下:

    public class ListNode {
    int val;
    ListNode next = null;
    
    ListNode(int val) {
    this.val = val;
    }
    }

    思路一:

    利用三个指针是实现链表反转

    public class Solution {
        public ListNode ReverseList(ListNode head) {
             // 判断链表为空
            if(head == null ){
                return null;
            }
            ListNode pre = null; // 当前节点的前一个节点,也就是新链表的头结点
            ListNode next = null; // 当前节点的下一个节点
            while( head != null){
                next = head.next; // 记录当前节点的下一个节点位置;
                head.next = pre; // 让当前节点指向前一个节点位置,完成反转
                pre = head; // pre 往右走
                head = next;// 当前节点往右继续走
            }
            return pre;
        }
    }

    思路二:

    利用递归的思想,假设链表为1->2->3->4->5先迭代到链表末尾5,然后从5开始依次反转整个链表

    head.next.next = head;是指使当前节点的下一个节点指向自己
    head.next = null断开与下一个节点的联系,完成真正的反序操作

    public class Solution {
        public ListNode ReverseList(ListNode head) {
            if(head==null||head.next==null)    //链表为空时返回
                return head;
            ListNode reserveNode = ReverseList(head.next);    //循环到链表尾部
            head.next.next = head;//反转链表的指向
            head.next = null;//断开原head的指向防止错链
            return reserveNode;
        }
    }
  • 相关阅读:
    单链表
    顺序表
    关于传输协议的简单了解
    URL/URI/URN
    点击图片弹出轮播图 -- 插件
    nodeJs中系统模块的常用方法和自定义模块暴露
    Buffer
    Sublime Text 3 安装Package Control
    npm的简单使用
    scrollTop()和document.body.scrollTop的区别
  • 原文地址:https://www.cnblogs.com/zengcongcong/p/11452856.html
Copyright © 2011-2022 走看看