Java实现循环链表
来源:互联网 发布:js 跨域请求 编辑:程序博客网 时间:2024/06/10 16:56
本案例需要完成的任务定义如下:实现一个循环链表(单链表),具备增加元素、删除元素、打印循环链表等功能。
网上许多同类问题的实现方式过于复杂、难懂,本文旨在提出一种实现循环链表的简单、易懂的方法。
定义链表节点:
对于每一个链表节点,关键要素是节点自身数值data以及所指向的下一个节点next。
package circularLinkedList;public class Node {//元素类型为int的节点private int data;private Node next;//定义构造器public Node(int i, Node nt){data = i;next = nt;}public Node(int i){this(i,null);}public Node(){this(0,null);}//更改元素数值public void setData(int i){data = i;}//读取元素数值public int getData(){return data;}//更改元素的指向public void setNext(Node nt){next = nt;}//读取元素的指向public Node getNext(){return next;}}
定义循环链表:
对于循环链表而言,关键要素是指定链表的头节点head、尾节点tail以及链表大小size;该数据结构支持在头部增加节点、在尾部增加节点,从头部删除节点及从尾部删除节点等。
package circularLinkedList;public class Linkedlst {private Node head;private Node tail;int size;//构造器public Linkedlst(){tail = head = null;size = 0;}//在链表头部增加节点public void addHead(Node hd){//如果使用该方法增加链表的第一个节点,则head=tail=hd,且next指向自身。if(size==0){hd.setNext(hd);tail = head = hd;size++;}else{tail.setNext(hd);hd.setNext(head);head = hd;size++;}}//在链表尾部增加节点public void addTail(Node tl){//如果使用该方法增加链表的第一个节点,则tail=head= hd,且next指向自身。if(size==0){tl.setNext(tl);tail = head = tl;size++;}else{tail.setNext(tl);tl.setNext(head);tail = tl;size++;}}//删除头部节点,被删掉的head将被自动回收public void delHead(){if(size>1){head = head.getNext();tail.setNext(head);size--;}else if(size==1){head = tail = null;size--;}else{System.out.println("There is no elements in the linked list.");}}//删除尾部节点public void delTail(){if(size>1){Node nd = new Node();nd = head;while(nd.getNext()!=tail){nd = nd.getNext();}nd.setNext(head);size--;}else if(size==1){head = tail = null;size--;}else{System.out.println("There is no elements in the linked list.");}}//打印全部节点public void printList(){Node nd = new Node();nd = head;try{while(nd.getNext()!=head){System.out.print(nd.getData());System.out.print("->");nd = nd.getNext();}System.out.print(nd.getData());System.out.print("->");System.out.print(head.getData());}catch(Exception e){e.printStackTrace();}}}
测试程序:
测试了打印循环链表元素、删除首端节点等方法,运行正常。
package circularLinkedList;public class LinkedlstTest {public static void main(String[] args) {// TODO Auto-generated method stubLinkedlst lst = new Linkedlst();Node head = new Node(11,null);lst.addHead(head);lst.addTail(new Node(22));lst.addTail(new Node(33));System.out.println("打印链表:");lst.printList();System.out.println();System.out.println("删除首端节点:");lst.delHead();lst.printList();System.out.println();System.out.println("删除首端节点:");lst.delHead();lst.printList();}}
0 0
- JAVA实现循环链表
- java实现循环链表
- java实现循环链表
- Java实现循环链表
- java实现循环链表
- Java实现 循环链表
- 循环链表(java实现)
- Java循环链表实现约瑟夫环
- Java循环链表实现约瑟夫环
- 用java实现循环链表
- 双向循环链表--java实现
- java实现双向循环链表
- Java循环链表实现约瑟夫环
- 约瑟夫环 java循环链表实现
- 循环链表判断(Java实现)
- Java数组实现循环队列、Java链表实现队列
- 循环链表实现循环队列
- 数据结构Java实现 ----循环链表、仿真链表
- 五子棋总结
- c语言调用matlab
- 笔记 - Android - 2.短信发送器
- 四元数指数映射旋转参数化的实际应用(Practical Parameterization of Rotations Using the Exponential Map)
- Sereja and Suffixes
- Java实现循环链表
- PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方法
- Codeforces Round #316 (Div. 2)D. Tree Requests
- Struts2 datetimepicker 日期月份乱码解决
- 反编译apk文件教程(查看java代码篇)
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
- Softmax回归
- hdoj--2147--kiki's game
- Java-2016.03.30 Spring AOP