Java数据结构与算法---链表

本文记录了一位大三学生学习Java数据结构过程中理解链表的经历。通过创建链表节点类,实现链表操作,以及展示如何用while和for循环遍历链表,旨在分享学习心得,帮助初学者理解链表概念。
摘要由CSDN通过智能技术生成

学计算机的都知道,数据结构实在是太重要了,我呢,大三,计划大四找软件开发的工作。所以这学期一直在学Java,同时也在学计算机的其它基础课程。链表这里卡了我一两天吧(时间挺长的其实),原理容易理解,可是用Java语言操作的时候就给我整的直接懵逼。终于,在今天晚上突然就明白了是怎么一回事。
所以写一篇博文分享一下。一是记录学习过程,二呢,希望能给其它新手提高微不足道的帮助。此外,我的程序都是在编译器里跑通的。
下面进入正文。
首先,创建链表的节点类:

public class ListNode{
		public int data;//链表中的数据
		public ListNode next;//指针
		
		public  ListNode() {//构造一个节点,data 0 and null link
			this(0,null);
		}
		
		public ListNode(int data) {//构造一个节点,with given data and null link
			this(data,null);
		}
		public ListNode(int data,ListNode next) { //构造节点,有数据data和link
			this.data = data;
			this.next = next;
		}

接下来创建链表对象list,并给里面放数据 。下面三行代码实现的是,将list1里面第一个数据移动到list的后面。

//创建两个链表对象
		ListNode list = new ListNode(2,new ListNode(4));
		ListNode list1 = new ListNode(3,new ListNode(9));
		//这个实现的是把list中的数据3,移动到list0的后面
		list.next.next = list1;
		list1 = list1.next;
		list.next.next.next = null;

然后现在还不会遍历链表中的数据,只能一个节点挨着一个节点去找出来了。像这样?

//打印元素
		System.out.println(list.data+" "+list.next.data+" "+list.next.next.data);
		System.out.println(list1.data);

可是,如果链表包含有成千上万的数据呢?所以我们需要使用循环遍历取出链表包含的元素。
一种普遍使用的遍历方法是用while循环:

//链表遍历
		ListNode current = list;//直接用list句柄会丢失list的初始值,因此声明一个current变量来访问链表中不同的节点
		while(current != null ) {//实际上current和list指向同一个对象,即链表的头节点
			System.out.println(current.data);//处理下一个值
			current = current.next;//current指向下一个节点
		}

还记得使用数组时我们可以使用for循环来遍历数组中的元素
数组在这里插入图片描述
现在用for循环方法同样可以遍历链表

	/*
		 * 使用for循环遍历链表
		 */
		for(ListNode current1 = list;current1 != null;current1 = current1.next) 
		{
			System.out.println(current1.data);
		}

运行结果我就不往出贴了。下面给出完整的实现代码:

package 单链表;
public class ListNode{
		public int data;//链表中的数据
		public ListNode next;//指针
		
		public  ListNode() {//构造一个节点,data 0 and null link
			this(0,null);
		}
		
		public ListNode(int data) {//构造一个节点,with given data and null link
			this(data,null);
		}
		public ListNode(int data,ListNode next) { //构造节点,有数据data和link
			this.data = data;
			this.next = next;
		}

	public static void main(String[] args) {
		//创建两个链表对象
		ListNode list = new ListNode(2,new ListNode(4));
		ListNode list1 = new ListNode(3,new ListNode(9));
		//这个实现的是把list中的数据3,移动到list0的后面
		list.next.next = list1;
		list1 = list1.next;
		list.next.next.next = null;
		//打印元素
		System.out.println(list.data+" "+list.next.data+" "+list.next.next.data);
		System.out.println(list1.data);
		//链表遍历
//		ListNode current = list;//直接用list句柄会丢失list的初始值,因此声明一个current变量来访问链表中不同的节点
//		while(current != null ) {//实际上current和list指向同一个对象,即链表的头节点
//			System.out.println(current.data);//处理下一个值
//			current = current.next;//current指向下一个节点
//		}
		/*
		 * 使用for循环遍历链表
		 */
		for(ListNode current1 = list;current1 != null;current1 = current1.next) 
		{
			System.out.println(current1.data);
		}
	}
}

那个,为了自己看着方便,所有的代码都是在一个class中的,你也可以分开写。
就这样,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值