1、结点类

  结点类使用静态内部类实现,代码如下:

private static class Node{
	int data;//元素的值
	Node next;//指向下一个结点的引用
}

2、单链表初始化

  为了方便通常在第一个结点之前附设一个结点,称之头结点,头结点在单链表类的构造函数中初始化,代码如下:

public class SinglyLinkedList {
	private Node L;    //头结点的引用
	private Node P;    //用来遍历的引用
    private int length;    //链表长度
	//构造函数,实例化一个新节点作为头结点
	public SinglyLinkedList() {
		L = new Node();    //初始化头结点
		L.next = null;    //头结点的引用域置空
	}
    /*
     *...(暂时省略其他代码)
     */
}

3、单链表的取值

  取出位置为 i 的值,i 从1开始计数,代码如下。

//取值,获取第i个元素并返回,
	public int getElem(int i) {
		P=L.next;    //初始化,P指向首元结点,计数器j初值为1
		int j=1;
		while(P!=null && j<i) {    //顺链域向后扫描,直到P为空或者P指向第i个元素
			P=P.next;
			j++;
		}
		if(P==null || j>i)    //i值不合法 P==null表示i>n,j>i说明i<=0
			throw new RuntimeException();    //抛着玩
		return P.data;
	}

  注意:首元结点是指存储第一个数据元素的结点,而头结点是指在首元结点之前附设的一个结点,头结点的数据域可以不存任何信息,也可存储于数据元素类型相同的其他附加信息。

4、单链表的按值查找

  查找指定元素出现的第一个位置,若未找到该元素则返回-1,代码如下:

//按值查找元素,返回第一个出现该元素的位置,找不到返回-1
	public int locateElem(int e) {
		P=L.next;    //初始化,P指向首元结点
		int j=1;    //计数器,记录元素的位置
		while(P!=null) {    //顺链域查找
			if(P.data == e)    //找到则退出循环
				return j;
			P=P.next;
			j++;
		}
		return -1; 
	}

5、单链表的插入

java 单链表图 java建立单链表的完整代码_单链表

  将元素插入到表的第i个结点上,代码如下:

//在指定位置插入元素,插入后该元素位置为i
	public boolean listInsert(int i,int e) {
		P=L;        //P指向头结点,P与P.next之间为插入的位置
		int j=0;
		while(j<i-1 && P!=null) {    //当j==i-1时跳出循环,此时P指向需要插入位置的前一个结点
			j++;
			P=P.next;
		}
		if(P==null || j>i-1)    //i值不合法,i>n+1或i<1
			return false;
		Node Q=new Node();
		Q.data=e;
		Q.next=P.next;
		P.next=Q;
		length++;    //不要忘记链表长度加1
		return true;
	}

6、单链表的删除

  删除指定位置的元素,与插入类似,代码如下:

//删除指定位置的元素
	public boolean listDelete(int i) {
		P=L;
		int j=0;
		while(P.next!=null && j<i-1) { //P.next为第i个元素,要确保它存在
			P=P.next;
			j++;
		}
		if(P.next==null || j>i-1) {
			return false;
		}
		P.next=P.next.next;
		length--;    //元素个数减一
		return true;
	}

7、前插法和尾插法增加元素

  直接用的插入删除操作

//前插法增加链表元素
	public void createList_H(int e) {
		listInsert(1,e);//即在第一个位置插入元素
	}
	//尾插法增加链表元素
	public void createList_R(int e) {
		listInsert(length+1,e);//即在最后一个位置的后面插入元素
	}

8、其他

public String toString() {
	P=L.next;
	StringBuilder sb = new StringBuilder("[");
	while(P!=null) {
		sb.append(P.data);
		sb.append(",");
		P=P.next;
	}
	sb.replace(sb.length()-1, sb.length(), "]");
	return sb.toString();
}
	
public int length() {
	return length;
}