您的位置:首页 > 其它

几个链表逆序的实现方法

2011-09-08 00:00 507 查看
链表逆序就是把一个链表按照原来的链接顺序逆序实现(也就是将头变成尾,尾变成头)。


编程思路:其实最关键的是先通过原来的链接顺序找到下个节点,然后再把前个节点反序。


链表的头节点如下:


struct ListNode
{
	void*       m_nKey;
	ListNode* 	m_pNext;
};


常规实现:


ListNode* ReverseIteratively(ListNode* pHead)
{
	ListNode* pReversedHead = NULL;
	ListNode* pNode = pHead;
	ListNode* pPrev = NULL;
	while(pNode != NULL)
	{
		// get the next node, and save it at pNext
		ListNode* pNext = pNode->m_pNext;
   		// if the next node is null, the currect is the end of original
  		// list, and it's the head of the reversed list
    	if(pNext == NULL)
     		pReversedHead = pNode;
    	// reverse the linkage between nodes
    	pNode->m_pNext = pPrev;
   		// move forward on the the list
    	pPrev = pNode;
  		pNode = pNext;
   	}
}


递归实现(不需要临时节点):


ListNode* reverse_list( ListNode* head)       //逆序
{
	ListNode* new_head=head;
	if(head==NULL || head->next==NULL)
		return head;
	new_head = reverse_list(head->next);
	head->next->next=head;
	head->next=NULL; 	//防止链表成为一个环,这是最关键的。
	return new_head; 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表