题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:
1、如果链表为空,返回;
2、定义两个节点指针pl = pHead 、pr = pHead->next;
3、令 pl -> next = NULL(链表反转后的结尾);
4、每一次循环,令:
pHead = pr;(pHead指向准备改变节点内指针指向的节点pr)
pr = pr->next;(在节点内指针指向改变前,先把下一个节点准备好)
pHead->next = pl; (改变节点内指针指向前一个节点pl)
pl = pHead;(准备好下一个pl)
5、当 pr = NULL 时,反转完成。pHead 为新的头结点,返回pHead即可。
struct ListNode* ReverseList(struct ListNode* pHead ) {
if(!pHead) return NULL;
struct ListNode* pl = pHead;
struct ListNode* pr = pHead->next;
pl->next = NULL;
while(pr)
{
pHead = pr;
pr = pr->next;
pHead->next = pl;
pl = pHead;
}
return pHead;
}