您的位置:首页 > 其它

链表的逆序实现

2009-04-27 18:14 323 查看
题目:输入一个链表的头结点,反转该链表。链表结点定义如下:

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

以上代码都经过测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: