链表刚学习时是用c来学习的,那时候对于结构体,指针这些东西实现链表觉得很合适,但想要应用到java上还是有些不同的
这里,我学习下用java来使用链表的方法:
首先,定义节点类
//链表节点
class Node{
protected Node next;
protected int data;
public Node(int data) { //构造器来赋值
// TODO Auto-generated constructor stub
this.data=data;
this.next=null;
}
public Node() {}
}
然后,在专门的一个类中写链表的各种操作,符合java面向对象的设计
在这里,我们写下所有的链表操作
1.链表初始化
public Node Initlink(Node node) { //初始化节点
node=new Node();
node.next=null;
return node;
}
传入的节点是你的头节点,这里我们创建的链表是带头结点的,头结点不带信息,方便与链表操作
2.创建链表
利用while循环,在循环内部创建新节点,利用头插法插入此节点(尾插法节点会改变),理解与C语言中一样,注意输入。public Node createlink(Node node) { //头插法创建链表
Scanner scanner=new Scanner(System.in);
int data=scanner.nextInt();
while (data!=999) { //输入999结束
Node pNode=new Node(data);
pNode.next=node.next;
node.next=pNode;
data=scanner.nextInt();
}
return node;
}
3.打印链表信息
根据传入的头结点,打印整个链表信息
public void Printlink(Node L) { //打印输出链表
Node node=L.next;
while(node!=null) {
System.out.println(node.data);
node=node.next;
}
}
写在这差不多完了。如果实现链表的其他操作,根据已创建的链表去实现就很容易了。下面给出完整代码:
package linklist;
import java.util.Scanner;
//链表节点
class Node{
protected Node next;
protected int data;
public Node(int data) { //构造器来赋值
// TODO Auto-generated constructor stub
this.data=data;
this.next=null;
}
public Node() {}
}
//链表方法
class Ways{
public Node Initlink(Node node) { //初始化节点
node=new Node();
node.next=null;
return node;
}
public Node createlink(Node node) { //头插法创建链表
Scanner scanner=new Scanner(System.in);
int data=scanner.nextInt();
while (data!=999) { //输入999结束
Node pNode=new Node(data);
pNode.next=node.next;
node.next=pNode;
data=scanner.nextInt();
}
return node;
}
public void Printlink(Node L) { //打印输出链表
Node node=L.next;
while(node!=null) {
System.out.println(node.data);
node=node.next;
}
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Ways ways=new Ways();
Node L=new Node();
L=ways.Initlink(L);
System.out.println("请输入你要创建的链表(输入999结束):");
L=ways.createlink(L);
ways.Printlink(L);
}
}
最后是控制台结果:
怎么样,是不是很符合头插法的特点呢?