用java实现单链表

对于一个单链表来说,要求有最基本的数据节点以及一些重要的方法。

方法应该有增删改查、定位、输出、获取链表长度、排序、链表读入、链表输出。下面是我用java写的单链表

public class List {

    public class Node{//定义节点
        public int data;
        public Node next;
        public Node(int data){
            this.data = data;
        }
    }

    private Node head;//头节点

    public Node getHead(){
        return head;
    }

    public int getLength()//得到链表长度
    {
        Node node = head;
        int k = 0;
        while(node != null){
            k++;
            node = node.next;
        }
        return k;
    }

    public Node Locate(int index){//定位位于第index位置的节点
        if(index <= 0)return null;
        Node node = head;
        int k = 1;
        while(node != null && k < index){
            k++;
            node = node.next;
        }
        return node;
    }

    public void input(int n){//链表输入
        if(n <= 0)return;
        Scanner reader = new Scanner(System.in);
        int value = reader.nextInt();

        head = new Node(value);
        Node node = head;
        int k = 1;
        while(k < n){
            k++;
            value = reader.nextInt();
            node.next = new Node(value);
            node = node.next;
        }
    }

    public void print(){//链表输出
        Node node = head;
        while(node != null){
            System.out.print(node.data  + " ");
            node = node.next;
        }
    }

    public void insert(int index, Node node){//链表插入
        if(index <= 0 || index > getLength())return;
        Node cur = Locate(index);
        node.next = cur.next;
        cur.next = node;
    }

    public void delete(int index){//删除节点
        if(index <= 0 || index > getLength())return;
        Node node = Locate(index - 1);

        Node del = node.next;
        node.next = del.next;
    }

    public void setData(int index, int data){//修改节点数据
        if(index <= 0 || index > getLength())return;
        Node node = Locate(index);
        node.data = data;
    }

    public int getData(int index){//得到节点数据
        if(index <= 0 || index > getLength())return -1;
        Node node = Locate(index);
        return node.data;
    }

    public void sort(){//用冒泡排序对链表进行排序
        Node cur = head;
        Node tmp = null;
        while(cur != tmp){
            while(cur.next != tmp){
                if(cur.data > cur.next.data){
                    int temp = cur.data;
                    cur.data = cur.next.data;
                    cur.next.data = temp;
                }
                cur = cur.next;
            }
            tmp = cur;
            cur = head;
        }
    }
}

测试代码如下:

public static void main(String[] args) {
        List L = new List();
        System.out.println("请输入链表中的数据");
        L.input(6);

        System.out.println("链表的长度为:" + L.getLength());
        System.out.println("排序后的链表为");
        L.sort();
        L.print();

        L.setData(4, 1000);
        System.out.println("把第4个数据修改为1000, 修改后如下");
        L.print();

        System.out.println("链表中第3个数据为: " + L.getData(3));

        L.delete(2);
        System.out.println("删除链表中的第2个数据后,结果如下");
        L.print();

    }

运行结果如下:

时间: 2024-08-09 10:34:48

用java实现单链表的相关文章

java实现单链表

前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html 接下来,我们开始学习java实现单链表. 单链表类 package linklist; public class LinkList { class Element { public Object value=null; private Element next=null; } private Element header = null;//头结点 /** * 初

java 实现单链表的逆序

</pre><pre name="code" class="java">package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } }

JAVA 实现单链表

1 public class LinkNode { 2 public String data; 3 public LinkNode next; 4 5 LinkNode(){ 6 this.data = "a"; 7 this.next = null; 8 } 9 10 LinkNode(String string){ 11 this.data = string; 12 this.next = null; 13 } 14 } 1 public class LinkList { 2 3

Java 实现单链表反序

//单链表反序 public class SingleLinkedListReverse { public static void main(String[] args) { Node head = new Node(0); Node temp = null; Node cur = null; for (int i = 1; i <= 10; i++) { temp = new Node(i); if (i == 1) { head.setNext(temp); } else { cur.set

数据结构复习--java实现单链表基本操作

单链表的基本操作包括建立单链表.查找运算(按序查找和按值查找).插入运算(前插和后插)和删除运算.下面给出具体的java实现程序: package com.zpp.test; //首先创建一个节点类 public class Node { private Node next; //指针域 private int data;//数据域 public Node( int data) { this. data = data; } } package com.zpp.test; public class

用Java实现单链表的基本操作

笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode { private Node head; public ListNode(){ head=null; } //在链表前添加节点 public void addpre(int dvalue){ Node n=new Node(dvalue); if(head==null){ head=n; }els

Java实现单链表翻转

单链表翻转比如有如下链表: 需要按照C B A 输出,我们可以有好几种方法: package org.andy.test; import java.util.ArrayList; import java.util.List; /** * @author andy * @version:2015-2-4 上午9:41:12 * * */ public class LinkedReverse { /** * @param args */ public static void main(String[

Java实现单链表的快速排序和归并排序

本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space complexity. 题目要求我们在O(n log n)时间复杂度下完成对单链表的排序,我们知道平均时间复杂度为O(n log n)的排序方法有快速排序.归并排序和堆排序.而一般是用数组来实现二叉堆,当然可以用二叉树来实现,但是这么做太麻烦,还得花费额外的空间构建二叉树,于是不采用堆排序. 故本

(java实现)单链表

什么是单链表 在了解单链表之前,你知道什么是链表吗?如果你不知道什么是链表,可以看看我的这篇博客<链表-LinkList> 单链表是链表的其中一种基本结构.一个最简单的结点结构如图所示,它是构成单链表的基本结点结构.在结点中数据域用来存储数据元素,指针域用于指向下一个具有相同结构的结点. 因为只有一个指针结点,称为单链表. 单链表中三个概念需要区分清楚:分别是头指针,头节点和首元节点. 头结点.头指针和首元结点(此段转自@ciyeer大牛的博客) 头结点:有时,在链表的第一个结点之前会额外增设