LeetCode题解之Reorder List
生活随笔
收集整理的這篇文章主要介紹了
LeetCode题解之Reorder List
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、題目描述
2、題目分析
首先將鏈表分為兩段,然后將后面的一段反轉,再合并兩個鏈表。
?
3、代碼
1 void reorderList(ListNode* head) { 2 if (head == nullptr || head->next == nullptr || head->next->next == nullptr) 3 return ; 4 5 ListNode *newH = splitList(head); 6 ListNode *rp = reverseList(newH); 7 mergeList(head, rp); 8 } 9 10 11 ListNode *reverseList(ListNode* list) 12 { 13 if (list == NULL || list->next == NULL) 14 return list; 15 16 ListNode *p = list; 17 ListNode *pn = list->next; 18 list->next = NULL; 19 20 while (pn != NULL) { 21 ListNode *tmp = pn->next; 22 pn->next = p; 23 p = pn; 24 pn = tmp; 25 } 26 return p; 27 } 28 29 void mergeList(ListNode *head_1, ListNode *head_2) 30 { 31 ListNode *p; 32 ListNode *pm = head_1; 33 ListNode *pn = head_2; 34 while (pm != NULL && pn != NULL) { 35 ListNode *tmpm = pm->next; 36 ListNode *tmpn = pn->next; 37 pm->next = pn; 38 if (tmpm != NULL) 39 pn->next = tmpm; 40 pm = tmpm; 41 pn = tmpn; 42 } 43 } 44 45 ListNode *splitList(ListNode *head) 46 { 47 if (head == NULL || head->next == NULL) 48 return head; 49 ListNode *pm = head; 50 ListNode *pn = head; 51 52 while (pn != NULL && pn->next != NULL) { 53 pm = pm->next; 54 pn = pn->next->next; 55 56 } 57 58 ListNode *newH = NULL; 59 if (pn == NULL) { 60 newH = pm; 61 ListNode *pt = head; 62 while (pt->next != newH) { 63 pt = pt->next; 64 } 65 pt->next = NULL; 66 } else if (pn->next == NULL) { 67 newH = pm->next; 68 pm->next = NULL; 69 } 70 71 72 return newH; 73 }?
轉載于:https://www.cnblogs.com/wangxiaoyong/p/10401454.html
總結
以上是生活随笔為你收集整理的LeetCode题解之Reorder List的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 自定义注解(Annota
- 下一篇: 覆写