【剑指offer】反转链表并返回链表的头指针

前提:

Node定义和链表的定义,参见文章Java 单链表操作

【解题思路】:

三个指针 :pBefore pCurrent(即将改变next方向的指针),pNext 三个指针 

public Node inverseLinkList(Node pHead) {
		// TODO Auto-generated method stub
		Node inverseNode=null;
		Node pCurrent=pHead;
		Node pBefore=null;
		Node pNext=null;
		if(pCurrent==null||pCurrent.next==null)
			return pHead;//验证链表只有一个节点和链表为空
		
		while(pCurrent!=null){
			 pNext=pCurrent.next;
			if(pNext==null)
				inverseNode=pCurrent;
			pCurrent.next=pBefore;
			pBefore=pCurrent;
			pCurrent=pNext;	
		}
//改变链表的首尾指针,
		tail=head;
		head=inverseNode;
//改变链表的首尾的值
		return inverseNode;
	}
	
	

}

方法二:迭代方法:

</pre><pre name="code" class="java">public Node inverseLinkList_Recursively(Node pNode){
		//Node pNode=pHead;
		Node pBefore=null;
		Node pNext=null;
		Node reverseNode=null;
		if(pNode==null)
			return pNode;
		if(pNode.next!=null)
			{
			pNext=pNode.next;
			if(pNext==null)
				reverseNode=pNode;
			pBefore=inverseLinkList_Recursively(pNode);
			pNode.next=pBefore;
			pBefore=pNode;
			pNode=pNext;
			}
		return reverseNode;
		
		
	}



 测试代码: 

	MyLinkList linklist3=new MyLinkList();
		linklist3.addFirst(3);
		linklist3.add(2, 4);
		linklist3.add(3, 5);
		linklist3.add(3, 6);
	
		linklist3.print(linklist3.head);
		Node newHead=linklist3.inverseLinkList(linklist3.head);
//改变linklist3.head处值为null  测试空指针
		linklist3.print(newHead);
运行结果:

the elements in the list :
3 4 5 6 
the elements in the list :
6 5 4 3 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值