链表简单模拟
来源:互联网 发布:简单软件开发工具 编辑:程序博客网 时间:2024/06/08 00:19
package com.test.utils;/** * 链表模拟类 * * @author luozuyu * */public class LinkedList { private Node head, tail; // 定义指向头和尾的指针 public void addFirst(Object el) { head = new Node(el, head); if (tail == null) tail = head; } public void addLast(Object el) { if (!isEmpty()) tail = tail.next = new Node(el); else head = tail = new Node(el); } public Object removeFirst() { Object el = head.info; if (head == tail) head = tail = null; else head = head.next; // 否则就把头指针后移 return el; } public Object removeLast() { Object el = tail.info; if (head == tail) head = tail = null; else { // 如果不是上面那种情况就把tail设置到原来tail的上一个元素 Node temp; // 这个是临时的 for (temp = head; temp.next != tail; temp = temp.next) tail = temp; tail.next = null; // 把原来的尾设置为null } return el; } public boolean isContains(Object el) { Node temp; // 有个缺陷!只能判断出离head近的那一个!有多个就不行 for (temp = head; temp != null && temp.info != el; temp = temp.next) ; return temp != null; } public void delete(Object el) { // 通过el删除元素(有缺陷) if (!isEmpty()) // 若非空并且只有一个元素且头元素的info和el等 if (head == tail && head.info == el) // 那么就删除头 head = tail = null; else if (el == head.info) // 若非空并且el和头元素的info相等那么删除头 head = head.next; else { Node pred, temp; for (pred = head, temp = head.next; temp != null && temp.info != el; pred = pred.next, temp = temp.next) ;// 判断其el是否在表内 if (temp != null) { // 若非空则删除元素 pred.next = temp.next; if (temp == tail) // 若为尾则删除尾 tail = pred; tail.next = null; } } } public boolean isEmpty() { return null == head; } public void displayAll() { for (Node temp = head; null != temp; temp = temp.next) System.out.println(temp.info + " "); } // public void reverse() { // if (head == null) return; // Node node = head.next; // head.next = null; // while (node != null) { // Node temp = node.next; // node.next = head; // head = node; // node = temp; // } // } /** * 反转链表:遍历节点依次插入到新节点头部 */ public void reverse() { Node prev = null; while (null != head) { Node temp = head.next; head.next = prev; prev = head; head = temp; } head = prev; } /** * 递归实现反转链表 */ public Node reverse(Node head) { if (head == null || head.next == null) return head; Node prev = reverse(head.next); head.next.next = head; head.next = null; return prev; } private static class Node { private Object info; // 记录信息 private Node next;// 指向下一节点的指针 public Node(Object i) { this(i, null); } public Node(Object i, Node n) { info = i; next = n; } }}
0 0
- 链表简单模拟
- 邻接表(简单模拟)
- 队列模拟(简单链表数据结构的处理)
- java模拟链表和栈以及简单实现
- 简单模拟
- 简单模拟
- 简单模拟
- 简单模拟
- 用数组简单模拟串行进位链
- 模拟(1)--poj3087(简单模拟)
- 帮同学写的ATM机模拟(简单链表操作)
- Codeforces Round #350 (Div. 2) E:Correct Bracket Sequence Editor (简单链表模拟)
- 1.2 milk2 简单模拟
- 1.1 transform 简单模拟
- 模拟简单秒表
- 模拟简单秒表
- PHP简单模拟多线程
- POJ 2453 简单模拟
- 按键精灵----找图找色
- Spring MVC 项目搭建
- jsp中获取界面元素的几个方法
- C++课程设计:学生成绩管理系统
- 110001 《创业的旅途》读后感——坚持梦想,虔诚对待,相信生命的奇迹
- 链表简单模拟
- HTTP 协议详解
- 一般Tarball 软件安装的建议事项 (如何移除?升级?)
- iBatis之SqlMapConfig.xml配置说明
- UITextView或UITextField字数限制
- 变量属性strong,weak,retain,assign的区别
- 贪心算法,重载问题
- NAL的基本特征
- 写给未来跟我结婚的你,今后咱俩要干的小坏事!