剑指 Offer II 024. 反转链表
给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
解法一:头插法
/*使用头插法*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newlist;
struct ListNode* n;
newlist=(struct ListNode*)malloc(sizeof(struct ListNode));
newlist->next=NULL;
while(head){
n=(struct ListNode*)malloc(sizeof(struct ListNode));
n->val=head->val;
n->next=newlist->next;
newlist->next=n;
head=head->next;
}
return newlist->next;
}
解法二:迭代,使用循环结构
struct ListNode* reverseList(struct ListNode* head){
/*使用迭代的方式完成反转*/
struct ListNode* pri=NULL;
struct ListNode* curr=head;
while(curr){
struct ListNode* next=curr->next;
curr->next=pri;
pri=curr;
curr=next;
}
return pri;
}
解法三:递归,使用选择结构
struct ListNode* reverseList(struct ListNode* head){
/*使用递归的方式完成反转*/
if(head==NULL ||head->next==NULL){
return head;
}
struct ListNode* newhead=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return newhead;
}