LinkedList和单双链表。

java中提供了双向链表的动态数据结构 --- LinkedList,它同时也实现了List接口,可以当作普通的列表来使用。也可以自定义实现链表。

单向链表:一个节点=本节点数据+下个节点地址

给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。

java 复制代码
public class Lee {
    private Node head1;
    private Node head2;
    Lee(){
        this.head1= new Node(0);
        this.head2= new Node(0);
    }

    public void  insert1(int data){
        Node newNode = new Node(data);
        Node curNode = head1;
        while (curNode.next!=null){
            curNode=curNode.next;
        }
        curNode.next=newNode;
    }

    public void  insert2(int data){
        Node newNode = new Node(data);
        Node curNode = head2;
        while (curNode.next!=null){
            curNode=curNode.next;
        }
        curNode.next=newNode;
    }

     static class Node{
        public int value;
        public Node next;
         Node(int data){
            this.value=data;
            this.next=null;
        }
    }

    public void Plink(Node head1,Node head2){
        while (head1!=null&&head2!=null){
            if (head1.value<head2.value)
                head1=head1.next;
            else if (head1.value>head2.value)
                head2=head2.next;
            else{
                System.out.println(head1.value+" ");
                head1=head1.next;
                head2=head2.next;
            }

        }
    }

    public static void main(String[] args) {
        Lee lee = new Lee();
        lee.insert1(1);
        lee.insert1(3);
        lee.insert1(4);

        lee.insert2(4);
        lee.insert2(5);
        lee.insert2(6);
        lee.Plink(lee.head1, lee.head2);
    }
}

双向链表:一个节点=上个节点地址+本节点数据+下个节点地址

如:定义两个函数,实现在双向链表的头部及尾部插入节点

java 复制代码
public class Lee {
    private Node head;
    Lee(){
        this.head= new Node(0);
    }

    public void  insertHead(int data){
        Node newNode = new Node(data);
        newNode.next=head;
        head.pre=newNode;
        head=newNode;
    }

    public void  insertTail(int data){
        Node newNode = new Node(data);
        Node current = head;
        while (current.next!=null){
            current=current.next;
        }
        current.next=newNode;
        newNode.pre=current;
    }

    public void printList(Node head) {
        Node current = head;

        // 从头到尾打印链表
        while (current != null) {
            System.out.print(current.value + " -> ");
            current = current.next;
        }
        System.out.println("null"); // 表示链表结尾
    }


    static class Node{
        public int value;
        public Node pre;
        public Node next;
         Node(int data){
            this.value=data;
            this.pre=null;
            this.next=null;
        }
    }

    public static void main(String[] args) {
        Lee lee = new Lee();
        lee.insertTail(2);
        lee.insertTail(3);
        lee.insertTail(4);
        lee.insertHead(4);

        lee.printList(lee.head);
    }
}
相关推荐
_Narcissus_3 小时前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
一只小小的芙厨4 小时前
前缀和与差分
数据结构·算法
一只小小的芙厨5 小时前
最短路总结
数据结构·算法
来一碗刘肉面7 小时前
有向无环图 DAG(描述表达式)
数据结构
郝学胜_神的一滴8 小时前
干货版《算法导论》18:遍历增删原理、时间复杂度与集合序列实现全解
数据结构·算法
BK贝壳8 小时前
Python底层:1亿个布尔值缓存失效标记,list爆内存numpy爆拷贝,bool-hybrid-array混合存储实测
数据结构·python·缓存·性能优化·list·numpy
_Narcissus_9 小时前
B树概念及操作笔记(含完整代码实现)
c语言·数据结构·数据库·c++·笔记·b树·算法
疯狂打码的少年9 小时前
【数据结构】图的应用:最短路径(Dijkstra / Floyd)
数据结构·笔记·算法
Fa_Mian_Tuan9 小时前
图论基础 | 邻接多重表原理剖析 + 完整可运行C语言代码(插边/删边/释放)
c语言·数据结构·笔记·算法·图论
学习星球9 小时前
【LeetCode算法题精讲】二分查找精讲
java·数据结构·算法·leetcode·职场和发展·图搜索