合併排序的鍊錶 leetcode

2021-10-25 05:21:14 字數 872 閱讀 2387

劍指 offer 25. 合併兩個排序的鍊錶

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

示例1:

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

選擇兩個鍊錶中的某個鍊錶作為基準(main),將另乙個鍊錶上的元素按照順序要求插入到基準鍊錶(exta)中

設定乙個基準鍊錶上的當前元素cur,初始化為該錶的表頭元素。

將另乙個鍊錶上的當前比較元素的值和基準鍊錶上的cur的下乙個元素作比較

1. 大於等於,則將基準鍊錶(main)當前元素後移,繼續比較。

2. 小於,則在另乙個鍊錶(extra)上的元素索引往後移動,繼續比較,直到條件變成大於等於了,將這段資料插入到main的cur的後面。

比較的終止條件設定為:

1. main上的cur已經是最後乙個節點了,將extra上的當前比較元素(以及其後面的所有元素)插入到cur的後面

2. extra上的當前比較元素以及為空。

為了在鍊錶上插入元素,extra鍊錶中需要使用兩個索引,乙個是p(代表當前等待處理的元素),另乙個是本次要插入的最後乙個元素(他的下乙個元素的值將大於等於cur的值)的索引

listnode* mergetwolists(listnode* l1, listnode* l2) //找到輔佇列中第乙個大於等於主佇列當前比較值的元素,將其前面的元素全部插入主佇列的cur和curnext之間,並移動cur

cur->next = p;

p = last->next;

last->next = curnext;

cur = curnext;

curnext = cur->next;

return head;

兩鍊錶合併,並排序

思想很簡單,我的思想不一定官方 沒考慮時間複雜度以及 的簡易 思想 先把乙個單鏈表插入到另乙個單鏈表然後在做排序 include include using namespace std typedef int elemtype typedef struct lnode linknode void i...

LeetCode之鍊錶排序 歸併排序

劍指 offer 25.合併兩個排序的鍊錶 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 常規做法是逐個比較即可,引入頭結點 definition for singly linked list.struct li...

合併排序鍊錶(劍指offer)

合併排序鍊錶 劍指offer struct listnode listnode mergelist listnode pheadlist1,listnode pheadlist2 判斷指標是否為空 if pheadlist2 null listnode pmergelisthead null 合併後...