Java 单链表的实现

209 阅读1分钟

先来看一下链表的组成
链表是由数据域与指针域组成,上一个结点的指针域指向下一个结点的数据域。

1.png 先来定义一个单链表

public class SingleList{
    private Node head;//定义头结点
    private int size; //链表长度
    public class Node{
        Object data;//数据域
        Node next;//指针域
        public Node(Object data, Node next) {
            this.data = data;
            this.next = next;
        }
    }
 }
public void insert(int i, Object x) {
        if(i<0||i>size){// 有索引值的方法需要判断下标是否越界
            throw new IndexOutOfBoundsException(i+"越界");//越界则抛出异常
        }
        Node newNode=new Node(x,null);//定义一个要插入的结点
        if (head==null){//判断如果头结点为空,则要插入的结点就是头结点
            head=newNode;
        }else {
            if(i==0){//当结点插入到头部的情况
                newNode.next=head;//图解如下
                head=newNode;
            }
            else{
                Node pnode=head;
                for(int j=1;j<i;j++){
                    pnode=pnode.next;
                }//找到i-1位置的结点
                newNode.next=pnode.next;
                pnode.next=newNode;//图解如下
            }
        }
        size++;//插入成功 链表长度加一
    }

2.png

3.png 单链表其他操作也大同小异,主要要注意使用for循环找到需要找到的结点和注意判断索引越界问题