public class Test16_ReverseList
{
public static void main(String[] args)
{
//创建链表
Node head = new Node(0);
System.out.println(head.value);
Node[] p = new Node[5];
int i = 0;
for(i = 0; i<5; i++){
p[i] = new Node(i+1);
System.out.println(p[i].value);
if(i >= 1){
p[i-1].next = p[i];
}else{
head.next = p[i];
}
}
Node reverseHeadNode = reverseList(head);
//输出翻转链表
while(reverseHeadNode != null){
System.out.println(reverseHeadNode.value);
reverseHeadNode = reverseHeadNode.next;
}
}
private static Node reverseList(Node head)
{
if(head == null){
return null;
}
/*//只有一个节点 已包含在下面情况
if(head.next == null){
return head;
}*/
Node reverseHead = null;
Node preNode = null;
Node pNode = head;
while(null != pNode){ //注意此处不能使用pNode.next 否则reverseHead始终为空 产生空指针异常。
Node nextNode = pNode.next;
if(nextNode == null){
reverseHead = pNode;
}
//将前继节点赋给当前节点的下一个
pNode.next = preNode;
//将当前节点作为前继节点 将后继节点作为当前节点 为下一个循环做准备
preNode = pNode;
pNode = nextNode;
}
System.out.println(reverseHead.value);
return reverseHead;
}
}
转载请注明原文地址: https://ju.6miu.com/read-19561.html