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 + "]";
}
}
双向链表的增删改查,翻转,查找倒数第N个节点
猜你喜欢
转载自blog.csdn.net/qq_43416157/article/details/104262041
今日推荐
周排行