`
vortexchoo
  • 浏览: 66897 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

双向LinkedList链表笔记

    博客分类:
  • java
阅读更多

这几天工作量不大,写了一个双向链表的实现。

在linkedlist中,每一个元素所存放的位置都可以理解成一个特殊结构的节点,这个节点分为三个部分:1.前一个节点是谁,自己,后一个节点是谁.

直接上干货

 

package myLinkedList;

public class MyLinkedList {
	
	private Node firstNode;
	
	private Node lastNode;
	
	private int size;
	
	/**
	 * @Chunf
	 * add an element with index
	 * @param obj
	 */
	public void add(Object obj){
		Node n = new Node();
		if(firstNode==null){
			n.setPrevious(null);
			n.setObj(obj);
			n.setNext(null);
			firstNode = n;
			lastNode = n;
		}else{
			n.setPrevious(lastNode);
			n.setNext(null);
			n.setObj(obj);
			lastNode.setNext(n);
			lastNode = n;
		}
		size++;
	}
	
	/**
	 *@author Chunf 
	 *
	 *return counts of the elements in this collection
	 */
	public int size(){
		return size;
	}
	
	/**
	 * @Chunf
	 * get an element
	 * @param obj
	 */
	public Object get(int index){
		if(firstNode==null){
			return null;
		}else{
			if(index==0){
				return firstNode.getObj();
			}else{
				Node node = firstNode;
				Object res = null;
				for(int i=1;i<=index;i++){
					res = node.getNext().getObj();
					node = node.getNext();
				}
				return res;
			}
		}
	}
	
	
	public void remove(int index){
		Node node = null;
		if(index==0){
			node = firstNode;
		}else{
			Node temp = firstNode;
			Node res = null;
			for(int i=1;i<=index;i++){
				res = temp.getNext();
				temp = temp.getNext();
			}
			node = res;
		}
		Node previousNode = node.getPrevious();
		Node nextNode = node.getNext();
		previousNode.setNext(nextNode);
		nextNode.setPrevious(previousNode);
		size--;
	}
	
	
	
	/**
	 * 
	 * @author Chunf
	 *
	 * @Time 2015年8月25日
	 */
	class Node{
		private Node previous;
		
		private Object obj;
		
		private Node next;

		public Node getPrevious() {
			return 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;
		}

		public void setPrevious(Node previous) {
			this.previous = previous;
		}

	}
}

 

分享到:
评论

相关推荐

    数据结构学习笔记-链表中的双向链表(JAVA)

    在实际应用中,双向链表常用于实现高效的迭代器,如Java集合框架中的`LinkedList`类。双向链表也可以作为缓存、队列、栈等数据结构的基础,因为它的特性使得在链表两端进行操作变得简单。 在学习和使用双向链表时,...

    java链表笔记

    - **双向链表**:每个节点都有一个额外的指针指向前面的节点,这样可以从两端进行遍历。 - **循环链表**:最后一个节点的指针指向链表的第一个节点,形成一个闭环。 - **有序链表**:链表中的节点按照某种顺序排列...

    java链表 个人总结

    在Java中,LinkedList的节点类是Node,它包含了三个字段:data(存储数据)、next(指向下一个节点)和prev(在双向链表中指向前一个节点)。当我们使用LinkedList时,可以通过addFirst()、addLast()、add()、remove...

    《Java数据结构和算法》学习笔记(4)——链表

    进一步学习,可以研究双向链表,它允许在节点的前后进行插入和删除,提高了操作的灵活性。循环链表则形成一个闭合的环,可以简化某些循环操作。 总之,链表是数据结构的基础,理解和熟练运用链表对于提升编程技能...

    linkedlist problems

    - **类型**:链表可以分为单向链表和双向链表。单向链表中的每个节点只有一个指向后继节点的指针;而双向链表中的节点则有两个指针,一个指向前驱节点,另一个指向后继节点。 2. **链表操作**: - **创建链表**:...

    集合框架学习笔记

    LinkedList则通过双向链表实现,适合频繁的插入和删除,但随机访问较慢。 HashSet和TreeSet实现了Set接口。HashSet基于哈希表,不允许有重复元素,插入和查找速度快;而TreeSet内部使用红黑树,除了保证元素唯一性...

    链表树-复合数据结构应用实例.zip

    链表有多种类型,如单向链表、双向链表和循环链表。在C/C++中,链表可以通过结构体和指针来实现;在Java中,可以使用LinkedList类;在Python中,可以使用内置的list或自定义类来模拟链表。学习链表的关键在于理解其...

    java技术从入门到精通(孙鑫)学习笔记Lesson 6(数据结构).doc

    首先,LinkedList是一个实现了List接口的类,它采用双向循环链表实现。这意味着每个节点包含一个数据元素和两个引用,分别指向前一个节点和后一个节点。这种结构使得在链表的任何位置添加、删除元素或访问元素都非常...

    学习笔记 java\CoreJava笔记\CoreJava_day11

    6. **LinkedList类**:LinkedList是List接口的另一种实现,它基于双向链表。这种结构使得在链表的开头和结尾添加或删除元素非常高效,但随机访问元素的效率低于ArrayList。 7. **Stack类**:Stack是Vector的一个...

    马士兵J2SE第七章容器个人学习笔记.pdf

    `ArrayList`使用动态数组实现,适合快速随机访问,而`LinkedList`使用双向链表实现,适合频繁的插入和删除操作。 【ArrayList与LinkedList的区别】 - 数据结构:`ArrayList`基于动态数组,`LinkedList`基于链表。 -...

    JAVA 数据处理笔记

    LinkedList基于双向链表,插入和删除效率高但访问速度慢。 **二、JAVA Map接口** Map接口存储键值对,不保证元素的顺序,且不允许键重复。Map接口的方法包括put添加键值对、get获取值、remove移除键值对以及size...

    java编程基础笔记(集合)

    LinkedList通过双向链表实现,适合于频繁的插入和删除操作,但访问速度相对较慢。 Set接口的典型实现有HashSet和TreeSet。HashSet依赖于HashMap,其内部使用哈希表存储元素,不保证元素的顺序,但插入和查找速度快...

    ---Java笔记---

    LinkedList则不同,它底层采用双向链表结构,每个节点包含数据以及指向前后节点的引用。这种结构使得LinkedList在插入和删除操作上具有优势,因为只需要改变相邻节点的引用即可,时间复杂度为O(1)。但是,由于...

    阿里P8 架构师整理Java学习笔记.pdf

    - **LinkedList**: 双向链表实现,插入和删除元素较快,但随机访问较慢。 **4.3 Set** - **HashSet**: 基于哈希表实现,提供较快的添加和查找速度。 - **TreeSet**: 基于红黑树实现,提供排序功能。 - **...

    良葛格Java 学习笔记(繁体全)

    - **ArrayList与LinkedList**:List接口的两种实现,ArrayList基于动态数组,LinkedList基于双向链表。 - **HashSet与TreeSet**:Set接口的实现,HashSet不保证顺序,TreeSet按元素自然顺序排序。 - **HashMap与...

    学习笔记 java\CoreJava笔记\CoreJava_day15

    - `LinkedList`实现了双向链表,对于频繁的插入和删除操作更高效。 - `HashSet`不存储重复元素,内部基于哈希表实现,提供快速的查找。 - `TreeSet`基于红黑树,保持元素排序。 5. **多线程**: - Java通过`...

    Java泛型与容器详细笔记.pdf (带书签)

    LinkedList基于双向链表实现,链表的插入和删除操作不需要移动元素,只需要改变相邻节点的指针即可,因此在列表中间插入和删除元素的效率较高。但是,它不支持快速的随机访问。和ArrayList一样,LinkedList也不是...

    集合-黑马程序员Java学习笔记

    LinkedList是一个双向链表,它的插入和删除操作通常比ArrayList更快,特别是当需要频繁地在列表中间进行操作时。但是,LinkedList的随机访问性能较差,因为访问元素需要从头或尾部开始遍历。 HashSet是一个不允许有...

    java笔记图解7

    理解它们的特点和使用场景,如ArrayList的动态扩容、LinkedList的链表操作效率、HashSet的无序唯一性以及HashMap的键值对存储,能提升你在实际开发中的效率。 多线程是Java的一个强项,它支持并发执行任务,提高了...

    java中的集合笔记.rar

    LinkedList基于双向链表,插入和删除快但访问慢。 2. **Set**: Set接口不包含重复元素,也没有顺序。HashSet是最常用的实现,它使用哈希表来存储元素,不允许有重复。LinkedHashSet则保持了元素的插入顺序,而...

Global site tag (gtag.js) - Google Analytics