如何实现单链表的增删改查
1.链表的特点
(1)可以用任意一组存储单元来存储单链表中的元素(存储单元可以是不连续的)
(2)存储每个数据元素的值外,还必须存储指示直接后继元素的信息
2.java语言中,用如下数据类来存储结点信息
class Node{
Node next = null;
int data;
public Node(int data) {this.data = data;}
}
3.单链表的插入操作
将值为x的新结点插入到单链表的第i个结点的位置上,具体操作步骤如下:
(1)找到ai-1的引用(存储地址)p
(2)生成一个数据域为x的新结点s
(3)设置p.next=s
(4)设置s.next=a
4.单链表的删除操作
(1)找到ai-1的存储位置p
(2)令p.next指向ai的直接后继结点ai+1
5.给出代码
public class MyLinkedList{
Node head = null;
/**
*向链表中插入数据
*/
public void addNode(int d){
Node newNode = new Node(d);
if(head==null){
head=newNode;
return;
}
Node tmp = head;
while(tmp.next!=null){
tmp = tmp.next;
}
//add node to end
tmp.next=newNode;
}
/**
*删除第index个结点
*/
public Boolean deleteNode(int index){
if(index<1||index>lengeh()){
return false;
}
//删除第一个元素
if(index == 1){
head=head.next;
return true;
}
int i=2;
Node preNode=head;
Node curNode=preNode.next;
while(curNode!=null){
if(i==index){
preNode.next=curNode.next;
return true;
}
preNode=curNode;
curNode=curNode.next;
i++;
}
}
/**
*返回结点长度
*/
public int length(){
int length = 0;
Node tmp=head;
while(tmp!=null){
length++;
tmp=tmp.next;
}
return length;
}
/**
*对链表进行排序
*/
public Node orderList(){
Node nextNode =null;
int temp=0;
Node curNode=head;
while(curNode.next!=null){
nextNode=curNode.next;
while(nextNode!=null){
if(curNode.data>nextNode.data){
temp=curNode.data;
curNode.data=nextNode.data;
nextNode.data=temp;
}
nextNode=nextNode.next;
}
curNode=curNode.next;
}
return head;
}
//打印链表
public void printList(){
Node tmp = head;
while(tmp!=null){
System.out.println(tmp.data);
tmp=tmp.next;
}
}
}
以上例子主要实现了链表的基本操作。