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();
}
}
用java实现的双向链表增加删除修改操作
最新推荐文章于 2024-01-27 16:42:46 发布