实现单链表的反转:
//翻转链表
public class ReverseList{
//链表节点的定义
public static class Node{
public int value;
public Node next;
public Node(int data)
{
this.value=data;
}
}
//(递归解法)翻转链表
public static Node DReverselist(Node head)
{
if(head==null)
{
return null;
}
Node p=head.next; //记录第二个节点
if(p==null)
{
return head; //只有一个节点直接返回p
}
Node pre=DReverselist(p);
head.next.next=head; //反转链表
head.next=null;
return pre;
}
//(循环解法)翻转链表
public static Node Reverselist(Node head)
{
if(head==null)
{
return null;
}
Node p=head; //记录头节点
if(p.next!=null) //移动第二个节点
{
p=p.next;
}else
{
return head;
}
head.next=null; //头节点的下一个节点指向空
while(p!=null)
{ Node t=p.next;
p.next=head;
head=p;
p=t;
}
return head;
}
//打印链表
public static void PrintList(Node head)
{
while(head!=null)
{
System.out.print(head.value+" ");
head=head.next;
}
System.out.println();
}
public static void main(String []args)
{
Node node =new Node(1);
node.next =new Node(2);
node.next.next =new Node(3);
node.next.next.next =new Node(4);
PrintList(node);
//Node dode= DReverselist(node);
//PrintList(dode);
Node mode= Reverselist(node);
PrintList(mode);
}
}