[每日算法220508] 单链表和双链表的反转

Posted 如何在5年薪百万

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[每日算法220508] 单链表和双链表的反转相关的知识,希望对你有一定的参考价值。

今日题目

  • 链表结构,单链表和双向链表
  • 链表的逆序

今日心得

  • 算法要求太严格,理解别人的代码容易。自己写的时候差一点,结果就很难出现。
  • 一定要用示例演示算法过程,一开始就写抽象代码,边界条件很难想清楚。
  • 算法也是需要背的,多背两遍,多写两边。你就可以说你看这个就是入门的东西。算法并不高级,也不代表聪明程度。大部分人的算法都不到天分的程度。面试基本上也用不到天分。

算法编码

package linklist;

/**
 * @ClassName SingleLinkList
 * @Description 单项链表
 * @Author kouryoushine
 * @Date 2022/5/7 22:36
 * @Version 1.0
 */

public class SingleLinkList 
    //单链表结构
    public static class Node 
        public int value;
        public Node next;

        public Node(int value) 
            this.value = value;
        
    
    //双链表结构
    public static class DoubleNode 
        public int value;
        public DoubleNode last;
        public DoubleNode next;

        public DoubleNode(int value) 
            this.value = value;
        
    





    public static void main(String[] args) 
        DoubleNode d1= new DoubleNode(1);
        DoubleNode d2= new DoubleNode(2);
        DoubleNode d3= new DoubleNode(3);
        d1.last= null;
        d1.next=d2;
        d2.last=d1;
        d2.next=d3;
        d3.last=d2;
        d3.next=null;
        DoubleNode rev = reverseDoubleLinkedList(d1);
        while (rev!=null)
            System.out.println(rev.value);
            rev=rev.next;
        

    

    public  static void  testLinkedList()
        Node node1 = new Node(1);
        node1.next = new Node(2);
        node1.next.next = new Node(3);
        Node rev = reverseLinkedList(node1);
        while (rev != null) 

            System.out.println(rev.value);
            rev = rev.next;

        
    

    //传入一个链表,返回逆序的链表
    public static Node reverseLinkedList(Node head) 
        Node pre = null;
        Node next = null;
        //四行代码,顺序一点都不能错
        while (head != null) //链表最后一个元素的next=null,顺序遍历链表
            next = head.next; //获取下一个元素(不提前保存就被下一步替换了)
            head.next = pre; //第一个元素指向pre时,pre是null
            pre = head;//存储当前元素
            head = next;//head切换下个元素
        
        return pre;


    


    //传入一个双链表,返回逆序的双链表
    public static DoubleNode reverseDoubleLinkedList(DoubleNode head) 
        DoubleNode pre = null;
        DoubleNode next = null;
        //四行代码,顺序一点都不能错
        while (head != null) //链表最后一个元素的next=null,顺序遍历链表
            next = head.next; //获取下一个元素(不提前保存就被下一步替换了)
            head.last=next;
            head.next = pre; //第一个元素指向pre时,pre是null
            pre = head;//存储当前元素
            head = next;//head切换下个元素
        
        return pre;


    




以上是关于[每日算法220508] 单链表和双链表的反转的主要内容,如果未能解决你的问题,请参考以下文章

[每日算法220508] 单链表和双链表的反转

反转单链表和双链表

数据结构[双链表的实现,以及双链表和单链表之间的比较,链表和顺序表的优劣]

单链表和双链表的插入时间如何?

深度解析数组单链表和双链表

Redis双端链表