2020-2-10
- Don’t forget, a person’s greatest emotional need is to feel appreciated.
莫忘記,人類情感上最大的需要是感恩。
題目:
反轉一個單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
進階:
你可以迭代或遞歸地反轉鏈表。你能否用兩種方法解決這道題?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-linked-list
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
個人解答:(C版本)
- 一開始就想到了迭代的方法,通過切換指針的指向,完成反轉鏈表。
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* q=NULL;
struct ListNode* p=NULL;
struct ListNode* t=NULL;
if(head==NULL)
{
return head;
}
if(head->next==NULL)
{
return head;
}
q = head;
p = q->next;
t = p->next;
q->next = NULL;
p->next = q;
while(t != NULL)
{
q = p;
p = t;
t = t->next;
p->next = q;
}
return p;
}
- 結果:
他山之石:
- 參考了官方題解,其中遞歸的方法真的很精妙,不過理解起來也很複雜,自己使用C語言實現了的遞歸算法如下:
struct ListNode* reverseList(struct ListNode* head){
if (head == NULL || head->next == NULL)
return head;
struct ListNode* p = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return p;
}