双向链表的增删改查,翻转,查找倒数第N个节点

package linkedlist;

public class DoubleLinkedList
{
	public Node1 head=new Node1("", 0);
	/*
	 * 双向链表的遍历,其实和单向链表一样
	 */
	public void show()
	{
		Node1 temp=head.next;
		while(temp!=null)
		{
			System.out.println(temp);
			temp=temp.next;
		}
	}
	/*
	 * 双向链表在尾部添加节点
	 */
	public void add(Node1 node)
	{
		Node1 temp=head;
		while(temp.next!=null)
		{
			temp=temp.next;
		}
		temp.next=node;
		node.pre=temp;
	}
	/*
	 * 修改节点的信息,根据number来修改,和单向链表的修改一模一样
	 */
	public void update(Node1 node)
	{
		Node1 temp=head;
		boolean flag=false;
		while(true)
		{
			//要么这个链表是空的,要么到了链表尾,都是找不到
			if(temp.next==null)
				break;
			if(temp.next.number==node.number)
			{
				flag=true;
				break;
			}
			temp=temp.next;
		}
		//如果找到了就干什么
		if(flag)
		{
			temp.next.date=node.date;
		}
		else
			System.out.println("不存在这个编号");
	}
	/*
	 * 双向链表的删除一个节点,根据节点的number值来删除
	 */
	public void delete(int number)
	{
		Node1 temp=head.next;
		boolean flag=false;
		while(true)
		{
			if(temp==null)
				break;
			if(temp.number==number)
			{
				//证明已经找到了
				flag=true;
				break;
			}
			temp=temp.next;
		}
		if(flag)
		{
			temp.pre.next=temp.next;
			if(temp.next!=null)
			{
				temp.next.pre=temp.pre;
			}
		}
		else
		{
			System.out.println("不存在这样子的节点");
		}
	}
	public static void main(String[] args)
	{
		// 先创建节点
		Node1 a = new Node1( "a",1);
		Node1 b = new Node1( "b", 2);
		Node1 c = new Node1( "c", 3);
		// 创建一个双向链表
		DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
		doubleLinkedList.show();
		System.out.println("====");
		doubleLinkedList.add(a);
		doubleLinkedList.add(b);
		doubleLinkedList.add(c);
		
		doubleLinkedList.show();
		
		// 修改
		Node1 m = new Node1( "z", 4);
		doubleLinkedList.update(m);
		System.out.println("修改后");
		doubleLinkedList.show();
		
		// 删除
		doubleLinkedList.delete(3);
		System.out.println("删除后");
		doubleLinkedList.show();
		
		

	}

}
class Node1
{
	public String date;
	public int number;
	public Node1 next;
	public Node1 pre;
	public Node1(String date, int number)
	{
		this.date = date;
		this.number = number;
	}
	@Override
	public String toString()
	{
		return "Node1 [date=" + date + ", number=" + number + "]";
	}
	
}
发布了133 篇原创文章 · 获赞 37 · 访问量 4737

猜你喜欢

转载自blog.csdn.net/qq_43416157/article/details/104262041