剑指offer——反转链表 Java版

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;
		
		
	}

}

你可能感兴趣的:(剑指offer——反转链表 Java版)