Java单链表和带附加头结点链表的插入删除操作
程序员文章站
2024-03-06 08:52:37
...
单链表的插入(头插,表中间插入,尾插)
//表头插入结点
newNode->next = first;
first = newNode;
//表中间插入结点和表尾插入结点
newNode->next = current->next;
current->next = newNode;
单链表的删除操作
//删除表头结点
del = first;
first = first->next;
delete del;
//删除表中间或尾部结点
del = current->next;
current->next = del->next;
delete del;
带附加头结点的单链表
在非空表的附加头结点后面和尾结点分别插入结点:
newNode->next = current->next;
current->next = newNode;
带附加头结点单链表的删除操作
del = current->next;
current->next = del->next;
delete del;
package shujujiegou;
public class ListNode3 {
//头插法: newNode->next = first; first = newNode;
//链表中间插入和链表中间插入:
//newNode->next = current->next;current->next = newNode;
/*
//用符合类表示单链表
class List; //List类的前视声明
class ListNode{ //结点类定义
friend class List;
private
int data;
ListNode next;
};
class List{ //class类定义
public
//链表公共操作
.......
private
ListNode first; //链表头指针
};
//用嵌套类表示单链表
class List{
public
//链表操作
.......
private
class ListNode { //嵌套的类
public
int data; //结点的数据域
ListNode next; //结点的指针域
};
ListNode first; //单链表的头指针
}
*/
//单链表的插入算法
public static void Insert(int i,int x){
//将新元素的x插入到第i各结点之后。i从1开始,i = 0表示插入到第一个节点之前。
if(first == null || i == 0){ //插入空表或非空表第一个节点之前
ListNode newNode = new ListNode(x); //建立一个新结点
if(newNode == null){
System.out.print("存储分配错误!");
}
newNode->next = first;
first = newNode; //头插法,新结点成为第一个结点
}else{
ListNode current = first; //从第一个结点开始检测
for(int k = 0;k<0;k++){
if(currnt = null) break;
else currnet = current->next;
}
if(current == null){
System.out.print("无效的插入位置!");
return false;
}else{
ListNode newNode = new ListNode(x);
if(newNode == null){
System.out.print("存储分配错误!");
}
newNode->next = current->next;
current->next = newNode;
}
}
return ture; //正常插入
}
//单链表的删除
public static boolean Remove(int i,int x){
//将链表中的第i的元素删去,i从0开始
ListNode del,current;
if(i<=1){
del = first;
first = first->next;
}else{ //删除第一个结点时重新拉链
current = first;
for(int k = 1; k<i-1; i++){ //循链表找第i-1个结点
if(current == null) break;
else current = current->next;
}
if(current == null || current->next == null){ //空表或链太短
System.out.print("无效的删除位置!");
return false;
}
del = current->next; //删中间结点或尾结点时拉链
current->next = del->next;
}
x = del->data; //取出被删结点中的数据值
delete del;
}
public static void main(String[] args) {
}
}
上一篇: JAVA垃圾收集器与内存分配策略详解
下一篇: Java实现多项式乘法代码实例