以下代码实现链表的最基本操作,包括给链表增加结点(每次都在链表尾部增加新结点)和删除链表中的结点。
/**
* 如何实现单链表的增加、删除操作?
*/
//定义结点类存储结点信息
class Node{
Node next = null;
int data;
public Node(int data) {
this.data = data;
}
}
public class LinkedList {
Node head = null;//链表头的引用
/**
* 向链表中插入数据(末尾依次增加)
* @param d:插入数据的内容
*/
public void addNode(int d) {
Node newNode = new Node(d);
if(head == null) {//链表为空
head = newNode;
return;
}
Node temp = head;
while(temp.next != null) {
temp = temp.next;
}
//在链表末尾插入元素
temp.next = newNode;
}
/**
* 删除链表中第index个结点
* @param index
* @return
*/
public boolean deleteNode(int index) {
if(index < 1 || index > length()) {//删除位置不合理
return false;
}
if(index == 1) {//删除链表的第一个元素
head = head.next;
return true;
}
int i = 1;
Node preNode = head;
Node curNode = head;
while(curNode != null) {
if(i == index) {
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return true;
}
/**
* 返回结点的长度
* @return
*/
public int length() {
int length = 0;
Node temp = head;
while(temp != null) {
length++;
temp = temp.next;
}
return length;
}
/**
* 输出当前链表的数据
*/
public void printList() {
Node temp = head;
while(temp != null) {
System.out.println(temp.data);
temp = temp.next;
}
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
//链表末尾插入数据
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
list.addNode(5);
System.out.println("链表长度为:"+list.length());
System.out.println("链表序列为:");
list.printList();
list.deleteNode(2);
System.out.println("链表长度为:"+list.length());
System.out.println("链表序列为:");
list.printList();
}
}
程序输出结果如下:
链表长度为:5
链表序列为:
1
2
3
4
5
链表长度为:4
链表序列为:
1
2
3
5