`
hyw520110
  • 浏览: 222639 次
  • 性别: 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写一个倒置单链表的源代码,适用于初学者,简单易懂

    利用栈实现逆置单链表

    3. **出栈操作**:`pop`函数实现了从栈中移除顶部元素的操作。 4. **主函数**: - 首先初始化栈。 - 读取输入的学生信息并压入栈中。 - 按照出栈顺序输出学生信息,实现了单链表逆置的效果。 #### 五、总结 本...

    不带头节点的单链表倒置算法

    在数据结构的学习中,单链表是一种基础且重要的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。本题目要求实现一个不带头节点的单链表倒置的算法,这是一个典型的链表操作问题,旨在...

    单链表倒置操作

    单链表操作,希望能够帮助正在学习数据结构的同学

    借助栈将一个带头结点的单链表倒置

    由于栈中元素的出栈顺序与入栈顺序相反,因此可以达到链表倒置的效果。 #### 2. 算法实现细节 在算法实现上,我们定义了三个关键函数:`LsInitiate()`用于初始化栈,`LSPush()`用于将元素压入栈,`LSPop()`用于从...

    单链表倒置.c

    单链表倒置.c

    java二维数组倒置实例

    本教程将详细介绍如何在Java中实现二维数组的倒置。 1. **二维数组的基本概念** 二维数组是由一维数组组成的数组,可以看作是多个一维数组的集合。每个一维数组称为二维数组的一行或一列。声明二维数组时,通常...

    将不带头结点的单链表倒置

    《数据结构与算法》(张宪超)给定一个不带头结点的单链表,写出将单链表倒置的算法

    JAVA源码Java数组倒置JAVA源码Java数组倒置

    JAVA源码Java数组倒置JAVA源码Java数组倒置

    单链表的操作 创建 删除 排序 求长度 倒置

    单链表的操作 包括创建 删除 排序 求长度 倒置

    链表倒置C程序

    实现链表的倒置:以倒插的方法的(既每次都插入到头结点的后面)来实现链表的倒置

    Java数组倒置.rar

    在Java中,数组是一种数据结构,用于存储同一类型的多个元素。数组倒置,也就是将数组中的元素顺序从后往前排列,使得原数组的第一个元素变为最后一个,最后一个元素变为第一个。这个过程可以用于各种应用场景,比如...

    C#单链表图形界面

    本项目聚焦于利用C#实现一个带有图形用户界面(GUI)的单链表操作系统,允许用户直观地进行生成、增删改、倒置和清空等操作。 首先,我们来详细解释单链表。单链表是一种线性数据结构,其中每个元素(称为节点)...

    C/C++单链表的一些操作

    单链表是一种线性数据结构,每个元素称为节点,每个节点包含两个部分:数据域,存储实际信息;指针域,存储指向下一个节点的地址。链表的第一个节点称为头节点,最后一个节点的指针域为NULL,表示链表的结束。 1. *...

    单链表反转python实现代码示例

    循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur-&gt;next指向pre即可。 代码: class ListNode: def __init__(self,x): self.val=x; self.next=None; def nonrecurse(head): #循环的方法反转...

    单链表逆序(简明,易懂)

    单链表逆序(简明,易懂) 单链表逆序(简明,易懂) 单链表逆序(简明,易懂)

    java源码:Java数组倒置.zip

    在Java中,我们可以使用两个指针,一个从数组的开始位置,另一个从数组的末尾位置,然后交换这两个指针指向的元素,直到它们相遇在中间。这种方法的时间复杂度为O(n),其中n是数组的长度。以下是一个简单的示例: `...

Global site tag (gtag.js) - Google Analytics