链表


链表的存储特点如下:可以用任意一组存储单元来存储链表中的数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素Ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素Ai的存储映像称为结点。N个结点链在一块称为链表,当结点只包含其后继系欸点的信息的链表就被称为单链表。


单链表的存储方式.png

在Java语言中,可以定义如下数据类来存储结点信息。

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

链表最重要的操作就是向链表中插入元素和从链表中删除元素。

单链表插入结点.png
单链表删除结点.png

示例:

public class MyLinkedList{
    Node head = null; //链表头的引用
    //向链表中插入数据
    public void addNode(int d){
        Node newNode = new Node(d);
        if(head = null) {
            head = newNode;
            return;
        }
        Node tmp = head;
        while(tmp.next != null) {
            tmp = tmp.next;
        }
        //添加结点在尾部
        tmp.next = newNode;
    }
      
    //删除第index个结点
    public Boolean deleteNode(int index){
        if(index < 1 || index > length()){
            return false;
        }
        if(index == 1) {
            head = head.next;
            return true;
        }
        int i =1;
        Node preNode = head;
        Node curNode = preNode.next;
        while(curNode != null) {
            if(i == index){
                preNode.next = curNode.next;
                return true;
            }
            preNode = curNode;
            curNode = curNode.next;
            i++;
        }
        retrun true;
    }

    //返回结点长度
    public int length(){
        int length = 0;
        Node tmp = head;
        while(tmp != null) {
            length++;
            tmp = tmp.next;
        }
        return length;
    }

    //对链表进行排序
    public Node orderList(){
        Node nextNode = null;
        int temp = 0;
        Node curNode = head;
        while(curNode.next != null) {
            nextNode = curNode.next;
            while(nextNode != null) {
                if(curNode.data > nextNode.data) {
                    temp = curNode.data;
                    curNode.data = next.data;
                    nextNode.data = temp;
                }
                nextNode = nextNode.next;
            }
            curNode = curNode.next;
        }
        return head;
    }
    public void printList(){
        Node temp = head;
        while(temp != null) {
            System.out.println(tmp.data);
            tmp = tmp.next;
        }
    }
    public static void main(String []args){
        MyLinkerList list = new MyLinkedList();
        list.addNode(5);
        list.addNode(3);
        list.addNode(1);
        list.addNode(3);
        System.out.printnln("before order:");
        list.printList();
        list.orderList();
        System.out.println("after order:");
        list.printList();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、线性表的顺序存储设计与实现(顺序表) 1.1 顺序存储结构的设计原理概要 顺序存储结构底层是利用数组来实现的,...
    千涯秋瑟阅读 5,345评论 2 4
  • 完整代码需结合前面一篇顺序表数据结构学习-线性表之顺序表各种操作网易云课堂小甲鱼课程链接:数据结构与算法 线性表的...
    NotFunGuy阅读 13,082评论 0 9
  • 本文来自本人著作《趣学数据结构》 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么...
    rainchxy阅读 9,197评论 6 20
  • 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢? 可以...
    rainchxy阅读 6,389评论 0 6
  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 9,811评论 4 12

友情链接更多精彩内容