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);
    }
}
相关推荐
韭菜盖饭1 小时前
LeetCode每日一题3261---统计满足 K 约束的子字符串数量 II
数据结构·算法·leetcode
♡喜欢做梦1 小时前
【数据结构】ArrayList与LinkedList详解!!!——Java
java·开发语言·数据结构·链表
好心的小明2 小时前
【深圳大学】数据结构A+攻略(计软版)
数据结构
熬夜学编程的小王2 小时前
【初阶数据结构篇】插入、希尔、选择、堆排序
数据结构·c++·插入排序·选择排序·希尔排序
三小尛2 小时前
快速排序(C语言)
数据结构·算法·排序算法
椅子哥2 小时前
数据结构--排序算法
java·数据结构·算法·排序算法
DDDiccc2 小时前
JAVA学习日记(十五) 数据结构
数据结构·学习
Nydia.J2 小时前
【学习笔记】数据结构(七)
数据结构·考研
2301_799084672 小时前
超全排序C语言实现
c语言·数据结构·算法·排序算法
苏唱!!!!2 小时前
二叉树-堆
数据结构