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;
        }
    }
  • 相关阅读:
    c基础_笔记_1
    python基础_类型_str
    MySQL的btree索引和hash索引的区别
    最大最小距离算法
    vim代码格式化插件clang-format
    Linux文件检索
    linux下视频转gif
    linux下直接复制文件内容到剪切板
    vim中的分屏操作
    为archlinux终端ls不同类型文件设置不同显示颜色
  • 原文地址:https://www.cnblogs.com/zengcongcong/p/11452856.html
Copyright © 2011-2022 走看看