题目描述
输入一个链表,反转链表后,输出新链表的表头。
输入:{1,2,3}
返回:{3,2,1}
代码
ListNode* ReverseList(ListNode* pHead) {
//方法一新建一个链表:使用头插法读入pHead的结点数值,时间复杂度为0(len),空间复杂度为0(1)???;
#if 0
ListNode* head= new ListNode(-1);
ListNode* p;
p = head;
p->next = NULL;
while (pHead != NULL)
{
ListNode* s=new ListNode(pHead->val);
s->next = p->next;
p->next = s;
pHead = pHead->next;
}
return head->next;
#endif
//方法二:调整链表指针(正规解法)
#if 1
/*
需要3个指针,cur指向当前结点(待反转的),next指向当前结点的第一个结点(起到保护作用,保证还没有反转的结点不发生变化),head指针表示已反转的链表的最后一个结点
*/
ListNode* head = NULL;
ListNode* cur= pHead;
ListNode* next;
while (cur != NULL)
{
next = cur->next;//保留后面的结点
cur->next = head;//把当前结点反转
head = cur;//保证head是已反转的链表的最后一个结点
cur = next;//指向下一个待反转的结点
}
return head;
#endif
}
328

被折叠的 条评论
为什么被折叠?



