Java创建单链表(头插法、尾插法),并逆序打印单链表:

package day_0324;
import java.util.Scanner;
import java.util.Stack;
class ListNode
{
int val;
ListNode next;
public ListNode(int val)
{
this.val=val;
}
}
public class ListNodeTest
{
public static void main(String[] args)
{
//railInsertCreatList(scanner);
headInsertCreateList();
}
/**
* 头插法建立单链表
* @param scanner
*/
private static void headInsertCreateList()
{
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext())
{
ListNode head=new ListNode(-1);
head.next=null;//head为头结点,无意义
String str=scanner.nextLine();
String[] temp=str.split(" ");
for(int i=0;i<temp.length;i++)
{
ListNode node=new ListNode(Integer.valueOf(temp[i]));
node.next=head.next;
head.next=node;
}
ListNode p=head.next;
while(p!=null)
{
System.out.println(p.val);
p=p.next;
}
}
scanner.close();
} /**
* 尾插法建立单链表
* @param scanner
*/
@SuppressWarnings("unused")
private static void railInsertCreatList()
{
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext())
{
ListNode head=new ListNode(-1);
head.next=null;
ListNode r=head;
String str=scanner.nextLine();
String[] temp=str.split(" ");
for(int i=0;i<temp.length;i++)
{
ListNode node=new ListNode(Integer.valueOf(temp[i]));
r.next=node;
r=node;
}
r.next=null;
ListNode p=head.next;
while(p!=null)
{
System.out.println(p.val);
p=p.next;
}
}
scanner.close();
}
/**
* 递归方法逆序打印单链表
* @param head
*/
public static void printListReverse1(ListNode head)
{
if(head!=null)
{
if(head.next!=null)
{
printListReverse1(head.next);
}
}
System.out.println(head.val);
}
/**
* 使用栈逆序打印单链表
* @param head
*/
public static void printListReverse2(ListNode head)
{
Stack<Integer> stack=new Stack<Integer>();
while(head!=null)
{
stack.push(head.val);
head=head.next;
}
while(!stack.isEmpty())
{
System.out.println(stack.pop());
}
}
}
05-11 09:32