给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
示例1
输入:{1,2,3}
复制返回值:{3,2,1}
struct ListNode
{
int val;
struct ListNode *next;
};
struct ListNode* ReverseList(struct ListNode* head)
{
}
第一步
定义cur(当前结点current), pre(前一个结点), temp(临时结点)
struct ListNode* cur = head;
struct ListNode* pre = NULL;
struct ListNode* temp = NULL;
while(cur)
{
temp = cur->next;//先将temp指向下一个结点
cur->next = pre;//找前一个结点,将结点断开,改变反向,形成尾结点
pre = cur, cur = temp;//将两个指针往后移动,必须先移动pre,如果先移动cur则pre无法向后退
}
return pre;