学计算机的都知道,数据结构实在是太重要了,我呢,大三,计划大四找软件开发的工作。所以这学期一直在学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中的,你也可以分开写。
就这样,谢谢。