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