给你单链表的头节点 head ,请你反转链表,并返回反转后的链表提示:
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
反转链表
就是将 从第二个节点开始(如果有第二个节点的话),每个节点的指针往前指了,但是这样有个问题,就是最开始的head应该往哪指?这里有两种方案:
1.增加一个 hair哨兵节点;
ListNode *pre=NULL,*now=NULL,*temp=NULL;
ListNode* hair=new ListNode(0);
hair->next=head;
//初始化
pre=hair;
now=head;
while(now!=NULL){
temp=now->next;
now->next=pre;
pre=now;
now=temp;
}
head=pre;
delete hair;
但是你把hair删了,那原head->next一定为NULL吗?
2.对head进行特判;
ListNode *pre,*now=NULL,*temp=NULL;
//初始化
pre=head;
now=head->next;//if exit
while(now!=NULL){
temp=now;
if(pre==head){
pre->next=NULL;
}
now->next=pre;
pre=now;
now=temp;
}
head=pre;
整个代码:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *pre,*now=NULL,*temp=NULL;
if(head==NULL)
return NULL;
//初始化
pre=head;
now=head->next;//if exit
while(now!=NULL){
temp=now->next;
if(pre==head)
pre->next=NULL;
now->next=pre;
pre=now;
now=temp;
}
head=pre;
return head;
}
};