Java实现链表的常见操作算法_Ubuntu_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Ubuntu

    当前位置:主页 > 服务器教程 > Ubuntu >

    Java实现链表的常见操作算法

    时间:2019-08-13|栏目:Ubuntu|点击:
  • 链表分为单链表,双向链表和循环链表,是一种链式存储结构,由一个个结点链式构成,结点包含数据域和指针域,其中单链表是只有一个指向后驱结点的指针,双向链表除头结点和尾结点外,每个结点都有一个前驱指针和一个后继指针,循环链表的尾结点的指针指向头结点.

    相比数组而言,链表的插入和删除比较快,查询慢.

    本文主要以单链表为例,介绍下链表的常用算法操作.

    单链表的结构:

    在Java语言中,链表的每个结点用Node类来表示:

    package com.linkedlist;

    public class Node {
        private int data;// 结点数据
        private Node next;// 下一个结点

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

    public int getData() {
            return data;
        }

    public void setData(int data) {
            this.data = data;
        }

    public Node getNext() {
            return next;
        }

    public void setNext(Node next) {
            this.next = next;
        }
    }

    定义一个链表操作类,里面包含常用的操作:


    package com.linkedlist;

    import java.util.Hashtable;

    public class LinkedListOperator {
        private Node head = null;// 头结点

    // 在链表的末尾增加一个结点
        private void addNode(int data) {
            Node newNode = new Node(data);
            if (head == null) {
                head = newNode;
                return;
            }
            Node temp = head;
            while (temp.getNext() != null) {
                temp = temp.getNext();
            }
            temp.setNext(newNode);
        }

    // 打印链表结点
        private void printLink() {
            Node curNode = head;
            while (curNode != null) {
                System.out.println(curNode.getData());
                curNode = curNode.getNext();
            }
            System.out.println("===========");
        }

    // 求链表长度
        private int getLength() {
            int len = 0;
            Node curNode = head;
            while (curNode != null) {
                len++;
                curNode = curNode.getNext();
            }
            return len;
        }

    // 删除某一个结点
        private boolean delNode(int index) {
            if (index < 1) {
                return false;
            }
            if (index == 1) {
                head = head.getNext();
                return true;
            }
            Node preNode = head;
            Node curNode = head.getNext();
            int n = 1;
            while (curNode.getNext() != null) {
                if (n == index) {
                    preNode.setData(curNode.getData());
                    preNode.setNext(curNode.getNext());
                    return true;
                }
                preNode = preNode.getNext();
                curNode = curNode.getNext();
                n++;
            }
            if (curNode.getNext() == null) {
                preNode.setNext(null);
            }
            return false;
        }

    // 链表排序:选择排序法,从小到大
        private void sortList() {
            Node curNode = head;
            while (curNode != null) {
                Node nextNode = curNode.getNext();
                while (nextNode != null) {
                    if (curNode.getData() > nextNode.getData()) {
                        int temp = curNode.getData();
                        curNode.setData(nextNode.getData());
                        nextNode.setData(temp);
                    }
                    nextNode = nextNode.getNext();
                }
                curNode = curNode.getNext();
            }
        }

    上一篇:HashMap实现原理和源码解析

    栏    目:Ubuntu

    下一篇:Java基础之static关键字的用法

    本文标题:Java实现链表的常见操作算法

    本文地址:http://www.jh-floor.com/fuwuqijiaocheng/Ubuntu/20201.html

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号