您的位置:首页 > Web前端

剑指offer 15-反转链表

2017-06-23 16:45 441 查看

1,题目

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

2,分析

反转链表进行的其实就是指针指向的操作问题,当前节点指针pNode,将其指向前一个指针pPrev,此时pNode原先指向的下一节点断开,所以还需pNext保存pNode的下一指针。
主要步骤是让pNode指向前一指针pPrev后,后移pPrev和pNode指针,pPrev指向pNode,pNode指向下一节点,两者顺序不要弄反了,直到pNode为NULL,此时反转完成,将头结点head指向最后一个节点pPrev即可。

3,代码

ListNode *reverseList(ListNode **head)
{
if(*head == NULL || (*head)->next == NULL)
return *head;

ListNode *pNode = (*head)->next;
ListNode *pPrev = NULL;
while(pNode)
{
ListNode *pNext = pNode->next;
pNode->next = pPrev;
pPrev = pNode;
pNode = pNext;
}
//pNode为空即反转完毕,此时pPrev为最后一个节点,头结点指向它即可
(*head)->next = pPrev;

return *head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: