日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode题解之Reorder List

發布時間:2024/4/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。