用java实现一个链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据节点的逻辑顺序是通过链表中的指针连接次序实现的。

链表----Java实现:

  1 package com.mianshi.easy;
  2
  3 public class LinkList {
  4
  5     //节点类是内部类
  6     private static class Node {
  7         Object data;                    //数据
  8         Node next;                        //下一个数据的引用
  9         public Node(Object data){
 10             this.data = data;
 11             this.next = null;
 12         }
 13     }
 14
 15     /**
 16      * 该成员变量head,是为了方便链表接口方法的编写,例如:
 17      *         判断链表是否为空,只需判断head是否等于null即可;
 18      *         获取链表中节点个数,只需从head依次往下走,直到最后一个节点的next为null 等*/
 19     Node head;
 20
 21     public LinkList(){
 22         head = null;
 23     }
 24
 25     public void clear(){                        //清空链表
 26         head = null;
 27     }
 28
 29     public void printAll(){                        //遍历打印链表:打印所有的data
 30         Node p = head;
 31         while(p != null){
 32             System.out.print(p.data+" ");
 33             p = p.next;
 34         }
 35     }
 36
 37     public boolean isEmpty(){                    //判断链表是否为空
 38         return head == null;
 39     }
 40
 41     public int length(){                        //获得链表长度(节点个数)
 42         Node p = head;
 43         int sum = 0;
 44         while(p != null){
 45             sum++;
 46             p = p.next;
 47         }
 48         return sum;
 49     }
 50
 51     //在指定位置插入元素,下标从0开始
 52     public void insert(Object data, int position){
 53
 54         if(position < 0 || position > length()){
 55             throw new IndexOutOfBoundsException("访问越界异常");
 56         }
 57         Node newNode = new Node(data);
 58         if(position == 0){
 59             newNode.next = head;
 60             head = newNode;
 61         }else if(position >= length() - 1){
 62             get(length() - 1).next = newNode;
 63         }else{
 64             newNode.next = get(position);
 65             get(position - 1).next = newNode;
 66         }
 67     }
 68
 69     //获取指定位置上的节点
 70     public Node get(int position){
 71
 72         if(position < 0||position >= length()){
 73             throw new IndexOutOfBoundsException("访问越界异常");
 74         }
 75         if(position == 0){
 76             return head;
 77         }
 78         Node p = head;
 79         for(int i=0; i<position; i++){
 80             p = p.next;
 81         }
 82         return p;
 83     }
 84
 85
 86     //主方法,验证链表类的功能
 87     public static void main(String[] args) {
 88
 89         LinkList ll = new LinkList();
 90         ll.insert(10, 0);
 91         ll.insert(20, 1);
 92         ll.insert(30, 0);
 93         ll.insert(40, 1);
 94         ll.insert(50, 4);
 95         ll.printAll();
 96
 97         System.out.println();
 98         //访问越界位置时,将会抛出异常,程序中没有try{}catch{}finally{}处理
 99         //程序会在异常处跳出来,不再运行下面部分
100         System.out.println(ll.get(5));
101
102         //这部分代码不再运行
103         ll.insert(90, 0);
104         ll.insert(80, 1);
105         ll.printAll();
106     }
107 }

结果:

30 40 10 20 50
Exception in thread "main" java.lang.IndexOutOfBoundsException: 访问越界异常
    at com.mianshi.easy.LinkList.get(LinkList.java:73)
    at com.mianshi.easy.LinkList.main(LinkList.java:100)

链表的关键点在于它对每个节点的next指针(或引用),不论是插入、删除或修改操作,都是去改变某个或某些节点的next指向。

时间: 2024-10-10 01:21:24

用java实现一个链表的相关文章

Java 实现一个链表

public class MyList { static class Node {// 节点类 Object data; Node next; public Node(Object data) {// 构造方法,为data赋值 this.data = data; this.next = null; } } Node head; public MyList() { head = null;// 链表的构造方法 } public void clear() {// 清除链表 head = null;

利用java实现一个简单的链表结构

定义: 所谓链表就是指在某节点存储数据的过程中还要有一个属性用来指向下一个链表节点,这样的数据存储方式叫做链表 链表优缺点: 优点:易于存储和删除 缺点:查询起来较麻烦 下面我们用java来实现如下链表结构: 首先定义节点类: 复制代码package LinkTest;/** 链表节点类 @author admin */public class Node {private int value;//存储数据private Node next;//下一个节点/** 定义构造器 @param vlau

实现一个链表和队列

import java.text.SimpleDateFormat; import java.util.Calendar; import org.apache.log4j.Logger; /* * 实现一个泛型链表类接口, 1.链表增加一个节点, 2.指定位置增加一个节点 3.删除指定位置的节点 4.删除某种内容的所有节点 加上日志 * */ public class LinkMe { public static void main(String args[]){ //BasicConfigur

输入一个链表,从尾到头打印链表每个节点的值

题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的"新链表"的表头 用栈处理: /** *    public class ListNode { *        int val; *        ListNode next = null; * *        ListNode(int val) { *            this.val = val; *        } *    } * */ import 

Java实现双链表

public class DoubleLink<T> { //存放第一个指针 private Node<T> firstNode; //存放最后一个指针 private Node<T> lastNode; //存放链大小 private int size; //构造函数 public DoubleLink() {} // --------------------------------add()系列---------------------------------- p

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:一个 Python 程序员告诉你

这篇文章专门给程序员写的,普通读者慎入.原作者:Kevin Sookocheff 译者:Celia Zhen,原文点击文末链接. 每当我告诉别人我一直在用Java工作时,大家的反应都是: “纳尼!Java?为啥是Java?” 说实话,本人刚开始的时候也是同样的反应.但是由于Java的类型安全,执行性能和坚如磐石的工具,我渐渐地开始欣赏Java.同时我注意到,现在的Java已今非昔比——它在过去的10年间稳健地改善着. 缘何是Java? 假 设每天都用Java的想法还没有让君恶心到食不下咽,我在此

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

算法总结之 判断一个链表是否是回文结构

给定一个链表的头节点head,判断是否是回文结构 1->2->1 返回true 进阶: 如果链表长度N,时间复杂度O(N) 额外空间O(1) 方法一 利用栈结构(需要额外空间) 从左到右遍历,一次压栈.   这样的到的  从栈顶到栈底的节点值出现顺序会与原链表从左到右的值出现顺序相反. 废话不多说,上代码: package TT; import java.util.Stack; public class Test92 { public class Node{ public int value;