Reverse a singly linked list.
很简单的一道题,问题在于要避免翻转后链表尾部的环。
ListNode* reverseList(ListNode* head) {
if(head==NULL)
return NULL;
ListNode * header=new ListNode(-1);
ListNode * p0=header;
ListNode * p1=head;
p0->next=p1;
while(p1!=NULL){
ListNode * p2=p1->next;
p1->next=p0;
p0=p1;
p1=p2;
}
free(header);
head->next=NULL;
return p0;
}
开始我没过,因为想当然的觉得既然header被free了,那么之前赋值的p1->next=header就是NULL
这是犯了机械主义的错误,木有考虑到事物是变化和互相联系的。。。
被赋值后,p1->next和header就木有啥关系了。
还有,单独写一个header能避免处理单节点的情况