欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java单链表和带附加头结点链表的插入删除操作

程序员文章站 2024-03-06 08:52:37
...

单链表的插入(头插,表中间插入,尾插)

//表头插入结点
newNode->next = first;
first = newNode;
//表中间插入结点和表尾插入结点
newNode->next = current->next;
current->next = newNode;

Java单链表和带附加头结点链表的插入删除操作
单链表的删除操作

//删除表头结点
del = first;
first = first->next;
delete del;
//删除表中间或尾部结点
del = current->next;
current->next = del->next;
delete del;

Java单链表和带附加头结点链表的插入删除操作
带附加头结点的单链表
Java单链表和带附加头结点链表的插入删除操作

在非空表的附加头结点后面和尾结点分别插入结点:

newNode->next = current->next;
current->next = newNode;

Java单链表和带附加头结点链表的插入删除操作
带附加头结点单链表的删除操作

del = current->next;
current->next = del->next;
delete del;

Java单链表和带附加头结点链表的插入删除操作

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) {

	}
}
相关标签: 数据结构和算法