算法与数据结构新手班第4节

本文主要探讨了单链表和双链表的概念,并通过一系列题目讲解了如何进行链表反转、使用链表实现队列和栈,以及双端队列的构建。此外,还涉及到了K个节点的组内逆序调整和链表中的数学运算问题,如两数相加和有序链表合并。
摘要由CSDN通过智能技术生成

单链表与双链表

单链表:两个属性分别为值,和下一个节点的地址

双链表:三个属性分别为值,上一个节点的地址和下一个节点的地址

题目一:单链表的反转

public class reverseLinkedList {
    public static class Node {
        public int vaule;
        public Node next;

        public Node(int vaule) {
            this.vaule = vaule;
        }

    }
    static Node reverseLinkedList(Node head) {
        Node pre = null;
        Node next = null;
        while (head != null) {
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
    public static void main(String[] args) {
        Node head = new Node(1);
        head.next = new Node(2);
        head.next.next = new Node(3);
        //如果仅像下面这样操作,head的vaule还是1,因为引用的传递,在上面的reverseLinkedList方法中如果在head = next;后面对head的属性进行操作,改变的实际是next的属性,因为head指向next
        //reverseLinkedList(head);
        //System.out.println(head.vaule);//head.vaule=1
        head = reverseLinkedList(head);
        System.out.println(head.vaule);
        System.out.println(head.next.vaule);
        System.out.println(head.next.next.vaule);
    }
}

JVM的释放:在上面这种链表中,只有一个对象head,如果先改变了head的指向,而不改变head,原先head的所有指向都会消失,这叫做JVM的释放

题目二:双链表的反转

public class reverseDoubleList {
    public static class Node {
        public int vaule;
        public Node next;
        public Node last;

        public Node(int vaule) {
            this.vaule = vaule;
        }
    }

    static Node reverseDoubleList(Node head) {
        Node pre = null;
        Node next = null;
        while (head != null) {
            //记录下一个位置
            next = head.next;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值