您的位置:首页 > 其它

【笔试】34、反转链表

2015-08-30 10:23 477 查看
/****************************************************************************************
 *题目:反转链表
 *		定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。
 *时间:2015年8月30日09:54:30
 *文件:ReverseLink.java
 *作者:cutter_point
 ****************************************************************************************/
package bishi.Offer50.y2015.m08.d30;

import bishi.Offer50.y2015.m08.d26.*;

public class ReverseLink
{
	/**
	 * 反转链表
	 * @param head
	 * @return
	 */
	public LinkNode reverLink(LinkNode head)
	{
		if(head == null)
			return null;
		else if(head != null && head.m_pNext == null)
		{
			return head;
		}//else if
		
		LinkNode front = null;
		LinkNode pNode = head.m_pNext;
		LinkNode reverNode = pNode.m_pNext;
		while(reverNode != null)
		{
			//把我们的当前节点和前一个节点的指向确定,然后把三个节点整体后移一位
			pNode.m_pNext = front;
			front = pNode;
			pNode = reverNode;
			reverNode = pNode.m_pNext;
		}//while
		
		pNode.m_pNext = front;
		reverNode = new LinkNode();
		reverNode.m_pNext = pNode;
		
		return reverNode;
	}
	
	/**
	 * 当我们的第一个节点就是我们要用的节点,也就是不是用一个空的节点作为头结点的方式
	 * @param head
	 * @return
	 */
	public LinkNode reverLink2(LinkNode head)
	{
		LinkNode pReversedHead = null;
		LinkNode pNode = head;
		LinkNode pPre = null;
		while(pNode != null)
		{
			//开始交换指针的方向
			LinkNode pNext = pNode.m_pNext;
			if(pNext == null)
			{
				//下一个节点是空的,说明到了末尾
				pReversedHead = pNode;
			}//if
			pNode.m_pNext = pPre;
			pPre = pNode;
			pNode = pNext;
		}//while
		
		return pReversedHead;
	}
	
	@org.junit.Test
	public void Test()
	{
		LinkList link = new LinkList();
		link.addTail(8);link.addTail(7);link.addTail(6);link.addTail(5);link.addTail(4);link.addTail(3);
		link.addTail(2);link.addTail(1);link.addTail(0);link.addTail(-1);link.addTail(-2);link.addTail(-3);
		
		//逆序输出
		LinkList.PrintListReversingly_Recursively(link.getHead());
		System.out.println();
		//我们反转之后看看输出
		ReverseLink rl = new ReverseLink();
		LinkNode pReverHead = rl.reverLink(link.getHead());
		LinkList.PrintListReversingly_Recursively(pReverHead);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: