单链表(java实现)

该博客主要围绕单链表展开,使用Java语言实现单链表。单链表是重要的数据结构,在信息技术领域有广泛应用,此实现有助于理解和运用单链表相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class SingleLinkList{
	Node head=new Node();
	public  boolean isEmpty() {
		return head.next==null;
	}
	//尾接法插入一个元素
	public void insertIntoLast(Node element) {
		Node temp=head;
		while(temp.next!=null) {
			temp=temp.next;
		}
		temp.next=element;
	}
	//插入,可以指定位置,超出链表大小时,默认插在最后
	public void insert(Node element,int index) {
		Node temp=head;
		for(int i=0;i<index-1;i++) {
			if(temp.next==null) {
				break;
			}
			temp=temp.next;
		}
		element.next=temp.next;
		temp.next=element;
	}
	//按照顺序插入,相同编号时不能加入
	public void insertByOrder(Node element) {
		Node temp=head;
		boolean canInsert=true;
		while(true) {
			if(temp.next==null) {
				break;
			}else if(temp.next.no>element.no) {
				break;
			}else if(temp.next.no==element.no) {
				canInsert=false;
				break;
			}
			temp=temp.next;
		}
		if(canInsert) {
		element.next=temp.next;
		temp.next=element;
		}
	}
	//删除指定位置的节点
	public void deleteNode(int index) {
		Node temp=head;
		for(int i=1;i<index;i++) {
			temp=temp.next;
		}
		temp.next=temp.next.next;
		
	}
	//返回链表中存有数据的节点
	public int linkListLen() {
		int len=0;
		Node temp=head;
		while(temp.next!=null) {
			len++;
			temp=temp.next;
		}
		return len;
	}
	//查找单链表的倒数第k个节点
	public Node getLastByIndex(int index) {
		int len=linkListLen();
		Node temp=head;
		if(temp.next==null) return null;
		if(len<index||index<=0) return null;
		for(int i=0;i<=len-index;i++) {
			temp=temp.next;
		}
		return temp;
	}
	//递归实现单链表的反转
	//参数:head为传入的头结点。
	public void alertLinkList(Node head) {
		if(head.next.next==null) {
			this.head.next=head.next;
			return;
		}else {
			head=head.next;
			alertLinkList(head);
			head.next.next=head;
			head.next=null;
		}
	}
	/*视频上的思路:
	1.先定义一个反向链表的头结点
	2.遍历原来的链表,每遍历一个,就将其放在链表的最前端
	3.现在的头结点赋给原来的头结点。
	*/
	public Node reverseLinkList(Node head) {
		SingleLinkList reverseLinkList=new SingleLinkList();
		Node cur=head.next;
		Node temp=null;//这个临时变量储存当前结点的下一个结点。
		while(cur!=null) {
		    temp=cur.next;
			cur.next=reverseLinkList.head.next;
			reverseLinkList.head.next=cur;
			cur=temp;
		}
		return reverseLinkList.head;
	}
	
	//从尾到头打印单链表
	public void displayDecorder(Node cur) {
		if(cur.next==null) {
			//System.out.println(cur);
			return;
		}else {
			cur=cur.next;
			displayDecorder(cur);
			System.out.println(cur+"倒序打印");
			
		}
	}
	//有序单链表的合并,合并后的单链表是有序的
	public SingleLinkList combineLinkList(SingleLinkList a,SingleLinkList b) {
		//将b中的节点按照顺序加到a中
		Node temp=b.head.next;
		Node next=temp.next;
		while(temp!=null) {
			next=next.next;
			a.insertByOrder(temp);
			temp=next;
			//System.out.println(temp+"ddd");
		}
		return a;
	}
	//遍历链表,打印
	public void display() {
		Node temp=head;
		while(temp.next!=null) {
			System.out.println(temp.next);
			temp=temp.next;
		}
	}
}
//节点类
class Node{
	public  int no;
	public  String name;
	public  String zhijie;
	Node next;
	public Node(int no,String name,String zhijie) {
		this.name=name;
		this.no=no;
		this.zhijie=zhijie;
	}
	//空构造表示头结点
	public Node() {
		// TODO 自动生成的构造函数存根
	}
	@Override
	public String toString() {
		return "Node [no=" + no + ", name=" + name + ", zhijie=" + zhijie + "]";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值