鍊錶 合併操作中的一些騷方法

2021-10-06 07:44:09 字數 1562 閱讀 9695

目錄

1、leetcode21. 合併兩個有序鍊錶

2、leetcode23. 合併k個排序鍊錶

2.1、順序合併

2.2、分治演算法

對於兩個有序鍊錶的合併操作應用場景還是比較多的,如:鍊錶的歸併排序。

思路:分別遍歷兩個鍊錶,依次將頭節點值小的取出插入新的鍊錶中即可;

注意:當其中乙個鍊錶為空時,直接取另乙個鍊錶節點即可,兩個鍊錶均取完結束迴圈。

public listnode mergetwolists(listnode l1, listnode l2) else if(l1 == null)else if(l2 == null)elseelse if(l2 == null)elseelse

}slow = slow.next;

}return dummy.next;

} }

//優化

public listnode mergetwolists(listnode l1, listnode l2) else if(l2 == null)elseelse

}curnode = curnode.next;

} return dummy.next;

}

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:

輸入:[

1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

public listnode mergeklists(listnode lists) 

listnode head = null;

for(listnode list:lists)

return head;

}

迴圈進行兩兩合併,直至合成一條鏈為止

//借助集合列表資料結構

public listnode mergeklists(listnode lists)

listlist = new arraylist<>();

listtmp = new arraylist<>();

collections.addall(list,lists);//陣列轉換成集合

while(list.size() > 1)

if((list.size()&1) == 1)

list.clear();

list.addall(tmp);

} return list.get(0); }

//覆蓋陣列中的舊資料,不在申請其他資料結構

public listnode mergeklists(listnode lists)

int len = lists.length;

while(len > 1)

if(i == len - 1)

len = index;

} return lists[0];

}

Git的一些騷操作

寫在前面 vim插入模式命令命令說明i 實現的是在游標之前的插入 i 大寫的i實現在游標所在行的最前面插入 a 實現在游標後插入 a 實現在游標所在行的行尾插入 o 實現在游標所在行的上方插入新行 o 是現在游標坐在行的下方插入新行 git中vim的命令 命令 說明 w 儲存編輯後的檔案內容,但不退...

鍊錶的一些操作

判斷兩個鍊錶是否有交點 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 假設兩個鍊錶都不存在環 相交的煉表示意圖如下所示。兩個沒有環的鍊錶如果是相交於某一結點,如上圖所示,這個結點後面都是共有的。所以如果兩個鍊錶相交,那麼兩個鍊錶的尾結點的位址也是一樣的。程式實現時分別遍歷兩個單鏈表,直到尾結...

Mac OS 上的一些騷操作

本帖記錄個人在使用 mac 作業系統上的一些騷操作,不斷更新,以饗讀者。用雙指上下劃觸控板嗎?no,我們有更騷的操作 command 回到頂部 command 滾到底部 另外,fn 上滾一頁 fn 下滾一頁 fn home,回到頂部 fn end,滾到底部 有時候從網上看到不錯的文字想要貼上到 wo...