劍指 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 合併後...