`
hyw520110
  • 浏览: 218671 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java实现单链表及倒置单链表中的元素

    博客分类:
  • java
阅读更多

要实现单链表,首先要建立链表的节点类:

Java代码 复制代码
  1. /**  
  2.  * 单链表的节点类,单链表的实现。  
  3.  */  
  4. package com.ty.third;   
  5.   
  6. /**  
  7.  * @author liming  
  8.  *  
  9.  */  
  10. public class SLLNode<T> {   
  11.     //你要储存的信息单位   
  12.     public T info;   
  13.        
  14.     //指向下一个元素   
  15.     public SLLNode<T> next;   
  16.        
  17.     public SLLNode(T i)   
  18.     {   
  19.         this(i,null);   
  20.     }   
  21.        
  22.     //第二个参数传入node是为了快速建立链表   
  23.     public SLLNode(T i, SLLNode<T> node)   
  24.     {   
  25.         this.info = i;   
  26.         this.next = node;   
  27.     }   
  28. }  
/**
 * 单链表的节点类,单链表的实现。
 */
package com.ty.third;

/**
 * @author liming
 *
 */
public class SLLNode<T> {
	//你要储存的信息单位
	public T info;
	
	//指向下一个元素
	public SLLNode<T> next;
	
	public SLLNode(T i)
	{
		this(i,null);
	}
	
	//第二个参数传入node是为了快速建立链表
	public SLLNode(T i, SLLNode<T> node)
	{
		this.info = i;
		this.next = node;
	}
}

然后,单链表类:

Java代码 复制代码
  1. package com.ty.third;   
  2.   
  3. public class SLLList<T>   
  4. {   
  5.     protected SLLNode<T> head, tail;   
  6.        
  7.     //当前的节点,用于遍历所有元素   
  8.     private SLLNode<T> cur = null;   
  9.        
  10.     //创建一个空的单链表   
  11.     public SLLList()   
  12.     {   
  13.         head = tail = null;   
  14.     }   
  15.        
  16.     //添加头节点   
  17.     public void addToHead(T info)   
  18.     {   
  19.         SLLNode<T> sllNode = new SLLNode<T>(info);   
  20.         //如果链表为空   
  21.         if(head == null)   
  22.         {   
  23.             head = sllNode;   
  24.             tail = head;   
  25.         }   
  26.         //链表不为空   
  27.         else  
  28.         {   
  29.             sllNode.next = head;   
  30.             head = sllNode;   
  31.         }   
  32.     }   
  33.        
  34.     //打印所有链表节点   
  35.     public void printAllNode()   
  36.     {   
  37.         SLLNode<T> temp = null;   
  38.         for(prepare();hasNext();next())   
  39.         {   
  40.             temp = getNextNode();   
  41.             System.out.println(temp.info);   
  42.         }   
  43.     }   
  44.        
  45.     //添加尾节点   
  46.     public void addToTail(T info)   
  47.     {   
  48.         SLLNode<T> sllNode = new SLLNode<T>(info);   
  49.         //链表为空,则直接创建头节点   
  50.         if(head == null)   
  51.         {   
  52.             addToHead(info);   
  53.         }   
  54.         //链表不为空,加到链表尾部   
  55.         else  
  56.         {   
  57.             tail.next = sllNode;   
  58.             tail = sllNode;   
  59.         }   
  60.     }   
  61.        
  62.     //列表是否为空   
  63.     public boolean isEmpty()   
  64.     {   
  65.         return (head == null);   
  66.     }   
  67.        
  68.     //判断列表是否有下一个元素   
  69.     public boolean hasNext()   
  70.     {   
  71.         if(isEmpty())   
  72.             return false;   
  73.         if(cur.next == null)   
  74.             return false;   
  75.         return true;   
  76.     }   
  77.        
  78.     //获得当前元素   
  79.     public SLLNode<T> getNextNode()   
  80.     {   
  81.         return cur.next;   
  82.     }   
  83.        
  84.     //当前元素下移   
  85.     public void next()   
  86.     {   
  87.         cur = cur.next;   
  88.     }   
  89.        
  90.     //为遍历准备   
  91.     public void prepare()   
  92.     {   
  93.         cur = new SLLNode<T>(null);   
  94.         cur.next = head;   
  95.     }   
  96.        
  97.     public static void main(String []args)   
  98.     {   
  99.         SLLList<String> sllList = new SLLList<String>();   
  100.         sllList.addToHead("Joking");   
  101.         sllList.addToHead("Testing");   
  102.         sllList.addToTail("Lily");   
  103.         sllList.printAllNode();   
  104.            
  105.         SLLList<String> sllList2 = new SLLList<String>();   
  106.         for(sllList.prepare(); sllList.hasNext(); sllList.next())   
  107.         {   
  108.             sllList2.addToHead(sllList.getNextNode().info);   
  109.         }   
  110.         sllList2.printAllNode();   
  111.     }   
分享到:
评论

相关推荐

    java数据结构单链表的倒置

    数据结构中java版。。。对于单链表的倒置。。。

    用JAVA写一个倒置单链表的源代码

    用JAVA写一个倒置单链表的源代码,适用于初学者,简单易懂

    java中级面试题(自己汇总)

    * JDK7用头插是考虑到了一个所谓的热点数据的点(新插入的数据可能会更早用到),但这其实是个伪命题,因为JDK7中rehash的时候,旧链表迁移新链表的时候,如果在新表的数组索引位置相同,则链表元素会倒置(就是因为...

    链式队列.rar

    在编程语言中,链式队列的实现通常涉及到指针或者引用的概念,例如在C++、C#、Java等面向对象的语言中,可以定义一个节点类(Node)和一个队列类(Queue)。队列类包含对头节点和尾节点的引用,以及相关的操作方法。...

    最热门的Java 算法面试题汇总

    10. **Java删除排序数组中的重复项**:可以使用双指针,一个指向当前未重复的元素,一个遍历数组,当两者相等时,跳过,否则交换它们的值。 11. **二叉树的最近公共祖先(LCA)**:通常使用深度优先搜索配合低阶位...

    java面试题

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,涉及到语言基础、数据结构、算法、多线程、JVM、框架、设计模式等多个方面。下面,我们将详细探讨这些领域的常见面试题及相关的知识点。 1. ...

    上机实验-2 (1).doc

    9. **接口的使用**:虽然在这个特定的实验中没有直接使用接口,但在Java GUI编程中,事件监听器(如`KeyListener`)就是接口的典型应用,它们定义了需要实现的方法。 10. **基本组件的事件处理**:通过`numberField...

    程序员面试宝典大全,大全

    Java程序员面试是求职过程中的关键环节,它涵盖了各种技术知识点,包括但不限于基础语法、数据结构、算法、框架应用、设计模式、并发编程等。本宝典将围绕这些核心领域展开,帮助你充分准备面试,提升成功几率。 1....

    code-interviews:代码面试算法。 对刷新概念等有用。

    2. 链表:分为单链表、双链表、环形链表,用于动态存储和操作元素。 3. 栈和队列:栈是后进先出(LIFO)结构,队列是先进先出(FIFO)结构。常用操作有push、pop、peek等。 4. 堆:可以是最大堆或最小堆,常用于...

    offer:剑指offer面试题

    - **封装、继承、多态**:理解这三大特性是Java的核心,学会如何设计和使用类及接口。 - **抽象类与接口**:掌握何时使用抽象类,何时选择接口,以及它们在多态中的作用。 - **异常处理**:理解异常的分类,学会...

Global site tag (gtag.js) - Google Analytics