题目:
输入一个链表,反转链表后,输入反转后的链表的头结点。
解法:
1、利用画图,想好每一步的关系。利用三个变量pre,cur,next。pre为当前节点cur反转后的下一个节点
即反转后cur->next = pre; next用来记录原链表中cur的下一个节点。
2、考虑好异常情况。(还是从函数 参数出发。 当前函数参数为ListNode* pHead,即考虑pHead==NULL和链表只有一个节点的情况)
代码如下:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL || pHead->next == NULL)
return pHead;
ListNode* pre = pHead;
ListNode* cur = pHead->next;
ListNode* next;
while(cur!=NULL)
{
next = cur->next; // 先记录cur在原链表中的下一个节点
cur->next = pre; //断开原链表,同时反转
pre = cur; //更新pre
cur = next; //更新cur
}
pHead->next =NULL; // 反转后的链表的尾节点的next指向空
return pre;
}