[LinkedList]——逻辑理解
2016-03-22 21:47
218 查看
public void add(Object obj){ Node n=new Node(); if(first==null){ n.setPrevious(null); n.setObj(obj); n.setNext(null); first=n; last=n;//相当于有两个变量指向同一个地址 }else{ n.setPrevious(last);//直接往last节点后增加新的节点 n.setObj(obj); n.setNext(null); last.setNext(n);//要形成一条链,将新节点粘到老节点上了 last=n; } size++; } public int size(){ return size; } public Object get(int index){ rangeCheck(index); Node temp=node(index); if (temp!=null) { return temp.obj; } return null; } public Node node(int index){ Node temp=null; if (first!=null) { temp=first; for (int i = 0; i < index; i++) { temp=temp.next; } } return temp; } public void remove(int index){ Node temp=null; if (first!=null) { temp=first; for (int i = 0; i < index; i++) { temp=temp.next; } } if (temp!=null) { Node up=temp.previous; Node down=temp.next; up.next=down; down.previous=up; } size--; } public void add(int index,Object obj){ Node temp=node(index); Node newNode=new Node(); newNode.obj=obj; if (temp!=null) { Node up=temp.previous; up.next=newNode; newNode.previous=up; newNode.next=temp; temp.previous=newNode; size++; } } private void rangeCheck(int index){ if (index<0||index>=size) { try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { MyLinkedList list=new MyLinkedList(); list.add("bbb"); list.add(1,"llll"); list.add("23123"); System.out.println(list.size()); System.out.println(list.get(1)); } }节点类:
public class Node { Node previous;//上一个节点 Object obj; Node next;//节点类型 public Node(){ } public Node(Node previous, Object obj, Node next) { super(); this.previous = previous; this.obj = obj; this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }下图的p,o,n类型,对应理解LinkedList的流程很重要。
相关文章推荐
- 解析Java中的队列和用LinkedList集合模拟队列的方法
- JAVA LinkedList和ArrayList的使用及性能分析
- 浅谈 java中ArrayList、Vector、LinkedList的区别联系
- LinkedList学习示例模拟堆栈与队列数据结构
- 集合操作(一)ArrayList,LinkedList源码分析
- 关于JDK1.7中LinkedList索引方法的思考
- 重新认识java-LinkedList
- ArrayList和LinkedList的主要区别
- [Leetcode题目]19. Remove Nth Node From End of List
- [Leetcode题目]21. Merge Two Sorted Lists
- [Leetcode题目]83. Remove Duplicates from Sorted List
- [Leetcode题目]160. Intersection of Two Linked Lists
- [Leetcode题目]203. Remove Linked List Elements
- [Leetcode题目]206. Reverse Linked List
- [Leetcode题目]234. Palindrome Linked List
- Java数据结构-线性表之单链表LinkedList
- ARRAYLIST VECTOR LINKEDLIST 区别与用法(2014-10-14)
- Remove Duplicates from Sorted List II
- Reverse Linked List
- Reverse Linked List II