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);
    }
}
相关推荐
雾里看山3 小时前
顺序表VS单链表VS带头双向循环链表
数据结构·链表
好好研究5 小时前
学习栈和队列的插入和删除操作
数据结构·学习
挺菜的8 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
2401_858286119 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
双叶8369 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
学不动CV了12 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
百年孤独_14 小时前
LeetCode 算法题解:链表与二叉树相关问题 打打卡
算法·leetcode·链表
算法_小学生14 小时前
LeetCode 287. 寻找重复数(不修改数组 + O(1) 空间)
数据结构·算法·leetcode
Tanecious.17 小时前
LeetCode 876. 链表的中间结点
算法·leetcode·链表
Wo3Shi4七17 小时前
哈希冲突
数据结构·算法·go