学习 数据结构教程(第3版) 李春葆 记录
使用java实现c++代码 p39
// 链表类 头插法建表
class LinkListF
{
// 节点类
class Node
{
int data; // 数据域
Node next; // 指针域
}
public Node first; // 头结点
public LinkListF() // 构造函数
{
this.first = new Node();
}
// 头插法建表
public void addFirstNode(int data)
{
Node s = new Node(); // 创建新结点
s.data = data;
s.next = first.next; // 将node插在原开始结点之前,头结点之后!!!
first.next = s;
}
// 打印所有结点
public void showAllNodes()
{
Node current = first;
while (current != null)
{
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
// 链表类 尾插法建表
class LinkListR
{
// 节点类
class Node
{
int data; // 数据域
Node next; // 指针域
}
public Node first; // 头结点
public Node r; // 尾结点
public LinkListR() // 构造函数
{
this.first = new Node(); // first 和 r都是引用类型,所以此时r和first指向同一个对象
r = first;
}
// 尾插法建表
public void addLastNode(int data)
{
Node s = new Node(); // 创建新结点
s.data = data;
r.next = s;
r = s;
}
// 打印所有结点
public void showAllNodes()
{
Node current = first;
while (current != null)
{
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
public class MyLinkList
{
public static void main(String args[])
{
int[] a =
{ 1, 2, 3, 4, 5 };
LinkListF linkListF = new LinkListF();
LinkListR linkListR = new LinkListR();
for (int i = 0; i < a.length; i++)
{
linkListF.addFirstNode(a[i]);
linkListR.addLastNode(a[i]);
}
linkListF.showAllNodes();
linkListR.showAllNodes();
}
}
输出结果:
0 5 4 3 2 1
0 1 2 3 4 5
0是头结点