单链表是有数据域和指针域结点组成的,所以要创建单链表,需要定义结点。定义结点如下所示:
package day02;
/**
* @author jcm
*
*时间 2016年8月23日
*/
class Node{
public int data;
public Node next;
public Node(int data){
this.data=data;
this.next = null;
}
public void display(){
System.out.print(this.data+" ");
}
}
创建单链表,采用头插法创建单链表,尾插法创建单链表和遍历单链表并且输出单链表
public class LinkList {
Node head;
public LinkList(){
head = null;
}
/**
* @author jcm
* @see 头插法创建单链表
* @param data
*/
public void createFromHead(int data){
Node node = new Node(data);//新建结点
if(head == null){
head = node;//头指针直接指向新创建的结点
}else{
node.next = head;//新结点指针指向头指针的地址
head = node;//改变头指针指向,头指针直接指向新创建的结点
}
}
/**
* @author jcm
* @see 尾插法创建单链表
* @param data
*/
public void createFromTail(int data){
Node node = new Node(data);
if(head == null){
head = node;
}else{
Node current = head;//当前结点指向头指针
while(current.next != null){//找到最后一个结点
current = current.next;
}
current.next = node;//最后一个结点指针指向新结点地址
}
}
/**
*@author jcm
*@see 遍历链表,并且打印链表
*/
public void display(){
Node current = head;
while(current != null){
current.display();
current = current.next;
}
System.out.println();
}
}
测试单链表的类
package day02;
/**
* @author jcm
*
*时间 2016年8月23日
*/
public class TestMain {
public static void main(String[] args) {
LinkList list = new LinkList();
list.createFromHead(34);
list.createFromHead(12);
list.createFromHead(56);
list.createFromHead(98);
list.display();
list.createFromTail(1);
list.createFromTail(2);
list.createFromTail(3);
list.display();
}
}
输出结果是
98 56 12 34
98 56 12 34 1 2 3
从结果可以看出,头结点创建单链表是逆序的,尾插法建立单链表是有序的。