java实现循环链表节点增删改查及有序插入

Java实现循环链表的节点添加、节点删除、节点修改、节点显示、有序插入。


public class DoubleLinkedList {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DoubleListDemo list = new DoubleListDemo();
		ListNode n1 = new ListNode(1, "a");
		ListNode n2 = new ListNode(2, "b");
		ListNode n3 = new ListNode(3, "c");
		ListNode n4 = new ListNode(4, "d");
		ListNode n5 = new ListNode(5, "e");
		ListNode n6 = new ListNode(6, "f");
		list.addListNode(n1);
		list.addListNode(n2);
		list.addListNode(n3);
		System.out.println("-------添加节点测试");
		list.showListNode(list.getHead());
		System.out.println("-------修改节点测试");
		list.updataListNode(new ListNode(3, "q"));
		list.showListNode(list.getHead());
		System.out.println("-------删除节点测试");
		list.delListNode(n4);
		list.delListNode(n3);
		list.delListNode(n2);
		list.delListNode(n1);
		list.showListNode(list.getHead());
		System.out.println("-------有序加入节点测试");
		list.addReorder(n4);
		//System.out.println(n4.pre);
		//System.out.println("测试");
		//list.showListNode(list.getHead());
		list.addReorder(n2);
		//System.out.println(n2.pre);
		//System.out.println(n4.pre);
		//System.out.println("测试");
		//list.showListNode(list.getHead());
		list.addReorder(n3);
		//System.out.println("测试");
		//list.showListNode(list.getHead());
		list.addReorder(n1);
		list.addListNode(n5);
		//System.out.println("测试");
		//list.showListNode(list.getHead());
		//System.out.println("测试");
		list.showListNode(list.getHead());
		System.out.println("测试前节点是否正确");
		System.out.println(n1.pre);
		System.out.println(n2.pre);
		System.out.println(n3.pre);
		System.out.println(n4.pre);
		System.out.println(n5.pre);
	}

}

class ListNode {
	public int id;
	public String name;
	public ListNode pre;
	public ListNode next;
	
	public ListNode(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	@Override
	public String toString() {
		return ("ListNode [id = " + id + ", name = " + name + "];");
	}
}

class DoubleListDemo{
	private ListNode head = new ListNode(0, "");
	//获取头结点
	public ListNode getHead() {
		return head;
	}
	//添加节点
	public void addListNode(ListNode listNode) {
		ListNode temp = head;
		while(true) {
			if(temp.next == null) {
				break;
			}
			temp = temp.next;
		}
		temp.next = listNode;
		listNode.pre = temp;
	}
	//显示链表节点
	public void showListNode(ListNode head) {
		ListNode temp = head;
		if(temp.next == null) {
			System.out.println("空链表,无法显示");
			return;
		}
		while(temp.next != null) {
			System.out.println(temp.next);
			temp = temp.next;
		}
	}
	//修改节点
	public void updataListNode(ListNode listNode) {
		ListNode temp = head;
		while(temp.next != null) {
			if(temp.next.id == listNode.id) {
				temp.next = listNode;
				return;
			}
			temp = temp.next;
		}
		System.out.println("没有找到要修改的节点");
	}
	//删除节点
	public void delListNode(ListNode listNode) {
		ListNode temp = head;
		if(temp.next == null) {
			System.out.println("空链表,无法删除");
			return;
		}
		while(temp.next != null) {
			if (temp.next.id == listNode.id) {
				if(temp.next.next != null) {
					temp.next = temp.next.next;
					temp.next.next.pre = temp;
					return;
				}else {
					temp.next = temp.next.next;
					return;
				}
			}
			temp = temp.next;
		}
		System.out.println("未找到待删除的节点");
	}
	//有序添加
	public void addReorder(ListNode listNode) {
		ListNode temp = head; 
		if(temp.next == null) {
			temp.next = listNode;
			listNode.pre = temp;
			return;
		}
		while(temp.next != null) {
			if(temp.next.id > listNode.id) {
				temp.next.pre = listNode;
				listNode.next= temp.next;
				listNode.pre = temp;
				temp.next = listNode;
				return;
			}else if (temp.next.id == listNode.id) {
				System.out.println("节点" + listNode.id + "已存在");
				return;
			}
			temp = temp.next;
		}
		temp.next = listNode;
		listNode.pre = temp;
	}
	//  
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值