天天看点

用java实现的双向链表增加删除修改操作

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
class Dnode
{
	public int score=-1;
	public Dnode llink;
	public Dnode rlink;
	}
class DoubleList
{
	static Dnode pre,ptr,head,current;
	DoubleList()
	{
		ptr=new Dnode();
		ptr.llink=ptr;
		ptr.rlink=ptr;
		head=ptr;
	}
	public static void insert(Dnode ptr)
	{
		Dnode first=head.rlink;
		ptr.rlink=head.rlink;
		ptr.llink=head;
		head.rlink=ptr;
		first.llink=ptr;
	} 	
	public static void delete(Dnode ptr)
	{
		ptr.llink.rlink=ptr.rlink;
		ptr.rlink.llink=ptr.llink;	
		ptr=null;
	}
	public static void modify(Dnode ptr,int m)
	{
		ptr.score=m;
	}
	public static int length()
	{
		current=head.rlink;
		int count=0;
		while(current.rlink!=head)
		{
			current=current.rlink;
			count++;
			
		}
		return count;
	}
	
	
	}
public class Main {

	public static void main(String[] args) throws IOException {
		DoubleList doublist=new DoubleList();
		printDoublelist(doublist);//输出当前双向链表
		Scanner sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		while(true)
		{
			System.out.println("1.插入 2.删除  3.修改");
			System.out.println("请输入要选择的操作序号:");
			int select=sc.nextInt();
			if(select==1)
			{
				insertopp(doublist);
			}
			if(select==2)
			{
				deleteopp(doublist);
			}
			if(select==3)
			{
				modifyopp(doublist);
			}
			System.out.println();
		}	 
	}
	public static void insertopp(DoubleList doublist)
	{//插入操作
		System.out.println("请输入待插入节点:");
		Scanner sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		int a=sc.nextInt();				
		while(a!=0)
		{  		
			Dnode node=new Dnode();
			node.score=a;
			doublist.insert(node);
			a=sc.nextInt();
		}
	printDoublelist(doublist);
	}
	
	public static void deleteopp(DoubleList doublist)
	{//删除操作
		System.out.println("请输入要删除节点序列号:");
		Scanner sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		int count=sc.nextInt();	
		Dnode current=doublist.head;
		for(int i=1;i<=count;i++)
		{  					
			current=current.rlink;
		}
		doublist.delete(current);
	printDoublelist(doublist);
	}
	public static void modifyopp(DoubleList doublist)
	{//修改操作
		System.out.println("请输入要修改节点序列号:");
		Scanner sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
		int count=sc.nextInt();	
		Dnode current=doublist.head;
		for(int i=1;i<=count;i++)
		{  					
			current=current.rlink;
		}
		System.out.println("请输入要修改的值:");
		int n=sc.nextInt();
		doublist.modify(current,n);
	printDoublelist(doublist);
	}
	public static void printDoublelist(DoubleList doublist)
	{
		System.out.println("双向链表:");
		System.out.print("head"+"<->");	
		   if(doublist.head.rlink!=doublist.head)
		   {
				Dnode current=doublist.head.rlink; 
				int count=0;
				while(current.rlink!=doublist.head)
				{
					System.out.print(current.score+"<->");
					current=current.rlink;
					
				}
				System.out.print(current.score);			
				
		   }
		   System.out.println();
		   
		
		
	}
		 
	}