Java单链表增删改查反转基本操作
来源:互联网 发布:js和jquery书籍 编辑:程序博客网 时间:2024/06/03 20:45
数据结构复习,代码是最好的说明。
节点类:
public class Node { private Object object; private Node next; public Node(Object object) { this.object = object; next = null; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; }}链表类:
public class SingleLinkedList { //头节点 private Node head; //链表长度 private int size; public SingleLinkedList() { head = null; size = 0; } /** * 头插入 * @param o */ public void addNewHead(Object o){ Node newHead = new Node(o); newHead.setNext(head); this.setHead(newHead); size++; } /** * 头删除 */ public void deleteHead(){ if(size==0){ return; } head=head.getNext(); size--; } /** * 指定index插入 * @param index * @param object */ public void add(int index,Object object){ if(index>size){ return; } if (index==0){ addNewHead(object); return; } Node temp=head; while (index>1){ temp = temp.getNext(); index--; } Node node=new Node(object); node.setNext(temp.getNext()); temp.setNext(node); size++; } /** * 指定index删除,修改、查询方法同理 * @param index */ public void delete(int index){ if(index>=size){ return; } if (index==0){ deleteHead(); return; } Node temp=head; while (index>1){ temp = temp.getNext(); index--; } temp.setNext(temp.getNext().getNext()); size--; } /** * 尾插入 * @param o */ public void append(Object o){ add(size,o); } /** * 顺序输出、逆序压栈 */ public void printAllNode(){ if(size==0){ return; } Node temp = head; while (temp.getNext()!=null){ System.out.print(temp.getObject().toString()+"->"); temp = temp.getNext(); } System.out.print(temp.getObject().toString()); System.out.println(); } /** * 递归反转,思想:右节点递归,左右节点指向反转 * @return */ public Node reverseR(Node head){ if (head==null||head.getNext()==null){ return head; } Node reversedHead=reverseR(head.getNext()); head.getNext().setNext(head); head.setNext(null); return reversedHead; } /** * 遍历反转,利用前节点、当前节点、后节点遍历链表,每次前节点与当前节点指向反转,最后头尾反转 */ public void reverse(){ if (head==null||head.getNext()==null){ return; } Node pre = head; Node cur = head.getNext(); Node next; while (cur!=null){ next = cur.getNext(); cur.setNext(pre); pre = cur; cur = next; } head.setNext(null); head = pre; } public Node getHead() { return head; } public void setHead(Node head) { this.head = head; } public int getSize() { return size; } public void setSize(int size) { this.size = size; }}链表反转有参考http://www.cnblogs.com/iamkk/p/5971252.html
如有错误,欢迎纠正!
阅读全文
0 0
- Java单链表增删改查反转基本操作
- JAVA数据库基本操作,增删改查
- Java双链表增删改查基本操作
- 单链表的增删改查基本操作
- 增删查改基本操作
- 基本操作增删改查
- Java操作Redis实现增删改查和基本操作
- java操作mongodb:基本的增删改查
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- HBase基本API(java)操作(增删改查)
- SQL增删改查基本操作
- django数据库基本操作增删改查
- MongoDB 增删查改基本操作
- mongodb php增删改查基本操作
- Hibernate基本增删改查操作
- mongodb增删改查基本操作
- Hibernate 实体基本增删查改操作
- hdu6201 transaction transaction transaction 树形dp || 最短路
- 人要学会步入生活
- React Native的WebStorm基本设置
- [乐意黎转载]JS中push()和pop()以及unshift()和shift()的用法小结
- 巴菲特思维实验:给你100万美元,你愿意在脑袋上开一枪吗?
- Java单链表增删改查反转基本操作
- 初识xsd
- POJ 1523 SPF(割点,分块,tarjan)
- rollviewpager 轮播图开源框架简单使用方法
- 多线程开启定时任务
- springboot配置了控制器和thymeleaf引擎后,控制层返回界面不自动解析
- Dell PowerEdge R820 服务器 安装windows server2008 R2 x64 操作系统报:“缺少所需的 CD/DVD驱动器设备驱动程序。如果您具有软盘...” 解决方法
- <wpf>关于TreeView问题
- 在Android Sudio中使用Uiautomator