這篇文章主要講解了“Java有序鏈表如何合并”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java有序鏈表如何合并”吧!
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了連云免費建站歡迎大家使用!
將兩個升序鏈表合并為一個新的升序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節(jié)點組成的。
示例 1:
輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
示例二:
輸入:l1 = [], l2 = []
輸出:[]
示例 3:
輸入:l1 = [], l2 = [0]
輸出:[0]
新建一個空的鏈表 nList
在兩個鏈表(l1,l2)都不為空的情況下,比較兩個鏈表的第一個元素的值的大小,取出最小的加入到新鏈表當中,然后小鏈表的頭指針指向下一位,并且nList的指針也指向下一位
如果兩個鏈表還都不為空,繼續(xù)循環(huán)
如果兩個鏈表有一個為空,那么將不為空的鏈表拼接到nList后邊
最后返回 nList 的next 作為新鏈表的頭結(jié)點
首先判斷兩個鏈表是否為空,為空直接返回空鏈表。不為空的繼續(xù)向下走
判斷 l1 和 l2的頭結(jié)點誰更小,則將這個節(jié)點保存為頭結(jié)點,后邊的節(jié)點一次拼接在該節(jié)點上邊。
后邊思路同版本一
新建一個節(jié)點,將原來的鏈表都傳到新的鏈表當中
public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode head = new ListNode(-1); ListNode = head; while (list1 != null && list2 != null) { boolean b = list1.val <= list2.val; all.next = b ? list1 : list2; if (b) list1 = list1.next; else list2 = list2.next; all = all.next; } all.next = list1 != null ? list1 : list2; return head.next; }
從原來的鏈表中選擇出來一個進行整合,不適用任何新的內(nèi)存
public ListNode mergeTwoLists(ListNode list1, ListNode list2) { if (list1 == null || list2 == null) { return list1 == null ? list2 : list1; } ListNode head = list1.val <= list2.val ? list1 : list2; if (list1.val <= list2.val) list1 = list1.next; else list2 = list2.next; ListNode tmp = head; while (list1 != null && list2 != null) { boolean b = list1.val <= list2.val; tmp.next = b ? list1 : list2; if (b) list1 = list1.next; else list2 = list2.next; tmp = tmp.next; } tmp.next = list1 != null ? list1 : list2; return head; }
感謝各位的閱讀,以上就是“Java有序鏈表如何合并”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對Java有序鏈表如何合并這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!