原题:反转一个单链表。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
第一遍解答:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *a;
ListNode *b;
ListNode *c;
if(head==NULL){ //空链表
return NULL;
}
if(head->next==NULL){ //长度为1
return head;
}
if(head->next->next==NULL){ //长度为2
a=head;
b=a->next;
b->next=a;
a->next=NULL;
head=b;
return head;
}
a=head;
b=a->next;
c=b->next;
while(c->next!=NULL){ //三个指针逐步操作
b->next=a;
a=b;
b=c;
c=c->next;
}
b->next=a; //处理最后两个位置
c->next=b;
head->next=NULL;
head=c;
return head;
}
};
范例:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *new_head = NULL;
while(head){
ListNode *next = head->next;
head->next = new_head;
new_head = head;
head = next;
}
return new_head;
}
};