双向循环链表(插入,删除,就地逆置)
来源:互联网 发布:淘宝客服自动回复语录 编辑:程序博客网 时间:2024/05/01 15:53
package design;import java.util.Scanner;//循环双链表public class LinkedList<AnyType> { private int theSize; private Node<AnyType> beginMarker; private Node<AnyType> endMarker; class Node<AnyType>{ //定义匿名类Nodepublic AnyType data;public Node<AnyType> prev;public Node<AnyType> next;public Node(AnyType d,Node<AnyType> p,Node<AnyType> n){this.data=d;this.prev=p;this.next=n;}}public LinkedList(){ //构造方法beginMarker=new Node<AnyType>(null,endMarker,endMarker);endMarker=new Node<AnyType>(null,beginMarker,beginMarker);beginMarker.next=endMarker;theSize=0;}public int size(){ return theSize;}public Node<AnyType> getNode(int idx){ //返回idx对应的结点Node<AnyType> p=null;if(idx<0||idx>size()) System.out.println("无法找到该点");if(idx<size()/2){p=beginMarker.next;for(int i=0;i<idx;i++)p=p.next;}else{p=endMarker;for(int i=size();i>idx;i--)p=p.prev;} return p; }public boolean add(AnyType x){ //插入元素add(size(),x);return true;}private void add(int idx,AnyType x){if(idx>size()||idx<0){System.out.println("输入错误");}else{Node<AnyType> p;p=getNode(idx);Node<AnyType> newNode=new Node<AnyType>(x,p.prev,p);newNode.prev.next=newNode;p.prev=newNode;theSize++;}}public AnyType remove(int idx){ //删除元素if(idx>size()||idx<0){System.out.println("无法找到该节点");return null;}elsereturn remove(getNode(idx));}public AnyType remove(Node<AnyType> p){p.next.prev=p.prev;p.prev.next=p.next;theSize--;return p.data;}public void addFirst(AnyType data){add(0,data);}public void addLast(AnyType data){add(size(),data);}public void trs(){ Node p=beginMarker; while(p.next!=beginMarker){ Node q=p; Node r=p.next; q.next=q.prev; q.prev=r; p=p.prev; } Node q=p; Node r=p.next; q.next=q.prev; q.prev=r; Node s=beginMarker; beginMarker=endMarker; endMarker=s; int i=0; for(Node x=beginMarker.next;x!=endMarker;x=x.next){ System.out.println(i+": "+x.data); i++; } i=0;}public void print(){int i=0;for(Node x=beginMarker.next;x.next!=beginMarker;x=x.next){System.out.println(i+": "+x.data);i++;}i=0;}public static void main(String[] args) { //验证部分LinkedList<String> La=new LinkedList<String>();System.out.println("1:创建链表");System.out.println("2:添加结点");System.out.println("3:删除结点");System.out.println("4:添加第一个");System.out.println("5:添加最后一个");System.out.println("6 :转置");System.out.println("请输入要进行的操作");Scanner sc=new Scanner(System.in);boolean flag=true;while(flag){ System.out.println("请输入您的要进行的操作:");int c=sc.nextInt();switch(c){ case 1: System.out.println("请输入数据个数"); int n=sc.nextInt(); System.out.println("输入数据"); for(int i=0;i<n;i++){ String data=sc.next(); La.add(data); } La.print(); break; case 2: System.out.println("输入数据的插入位置和数据"); int w=sc.nextInt(); String data=sc.next(); La.add(w,data); La.print(); break; case 3: System.out.println("输入要删除结点的位置"); int q=sc.nextInt(); La.remove(q); La.print();break; case 4: System.out.println("输入要添加的数据"); String d=sc.next(); La.addFirst(d); La.print();break; case 5: System.out.println("输入要添加的数据"); String da=sc.next(); La.addLast(da); La.print();break; case 6: La.trs(); break; default :System.out.println("您输错了,请重新输入");break;}}}}
0 0
- 双向循环链表(插入,删除,就地逆置)
- 双向循环链表的插入删除
- 双向循环链表 初始化 插入 删除
- 单向循环链表就地逆置
- 双向循环链表的插入和删除
- 双向循环链表的创建,插入与删除。
- 双向循环链表的创建,插入,删除操作
- 双向循环链表的创建修改插入删除操作
- 带头双向循环链表的插入和删除
- 数据结构--双向循环链表--插入和删除
- 数据结构之双向循环链表操作4-(插入,删除,建立等)
- 双向循环链表(创建·插入·删除·遍历)
- 双向链表插入删除
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- Linux设备驱动程序(LDD3)中snull的编译问题
- python小结
- java_web用户的自动登录模块的实现
- Java BlockingQueue
- 【Java学习小结】-【Web入门相关总结一】
- 双向循环链表(插入,删除,就地逆置)
- QT输入输出(一) 之 QDataStream 测试
- 获取socket远程和本地IP端口
- jpeg-9中关于read_JPEG_file的使用及通过framebuffer显示JPEG
- 网页中文 &#x 编码
- OpenGL ES 着色器中问题解决技巧
- CPU调度算法
- 创建静态库和动态库
- 有关采用Filter:实现网站自动登录功能模块