java关于单链表实现方式

自己做的笔记就不想就懒得再打一遍了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

public class SingleLinkedListDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Node a1 = new Node(1,10);
		Node a2 = new Node(2,20);
		Node a3 = new Node(3,30);
		Node a4 = new Node(3,40);
		SingleLinkedList singlelinklist =new SingleLinkedList();
		singlelinklist.addByOrder(a1);
		singlelinklist.addByOrder(a3);
		singlelinklist.addByOrder(a2);
		singlelinklist.list();
		System.out.println();
		singlelinklist.update(a4);
		singlelinklist.list();
		System.out.println();
		singlelinklist.del(3);
		singlelinklist.list();
		
	}
	
}

class Node{		//创建节点
	public int data;
	public int no ;	//编号
	public Node next;
	public Node(int n,int m) {
		this.no =n;
		this.data=m;
	}
	@Override
	public String toString() {
		return "Node [No="+no+",data="+data+"]";
	}
}
class SingleLinkedList{
	private Node head =new Node(0,0);
	
	public void add(Node newNode) {		//无序的添加
		Node temp =head;
		while(true) {
			if(temp.next==null) {
				break;
			}
			temp=temp.next;
		}
		temp.next= newNode;
	}
	public void addByOrder(Node newnode) {		//按照编号添加
		Node temp =head;
		boolean flag = false;		//标志添加的编号是否存在
		while(true) {
			if(temp.next==null) {	//temp已经在最后
				break;
			}
			if(temp.next.no>newnode.no) {	//位置找到在temp后面插入
				break;
			}else if(temp.next.no==newnode.no) {	//编号存在
				flag=true;
				break;
			}
			temp =temp.next;
		}
		if(flag) {
			System.out.println("编号为"+newnode.no+"已存在,无法加入");
		}else {
			newnode.next=temp.next;
			temp.next=newnode;
		}
	}
	public void update(Node newnode) {
		if(head.next==null) {
			System.out.println("链表为空");
			return;
		}
		Node temp =head.next;
		boolean flag =false;	//表示是否找到该节点
		while(true) {
			if(temp==null) {	//	表示链表已经遍历完了
				break;
			}
			if(temp.no==newnode.no) {
				flag=true;
				break;
			}
			temp=temp.next;
		}
		if(flag) {
			temp.data=newnode.data;
		}else {
			System.out.println("未找到该节点");
		}
	}
	public void del(int no) {
		Node temp =head;
		boolean flag =false;	//标志是否找到要删除的节点
		while(true) {
			if(temp.next==null) {
				break;
			}if(temp.next.no==no) {	//删除的节点找到了
				flag =true;
				break;
			}
			temp=temp.next;	
		}
		if(flag) {
			temp.next =temp.next.next;
		}else {
			System.out.println("删除节点不存在");
		}
	}
	
	public void list() {
		if(head.next ==null) {
			System.out.println("链表为空");
			return;
		}
		Node temp =head.next;
		while(true) {
			if(temp==null) {
				break;
			}
			System.out.println(temp);
			temp=temp.next;
		}
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值