https://www.nowcoder.com/practice/a479a3f0c4554867b35356e0d57cf03d
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,即不开辟新的内存空间
首先,为了方便操作链表,我们定义一个 dummyHead,我们遍历两个链表,直到其中有一个到达尾部,则停下来
在遍历的过程中,我们将元素值小的节点依次链在 mergerList 的后边,最后,我们看看哪个链表还有剩余的节点,将其链在 mergeList 的后边,最后返回合并链表的首节点
代码
static class Solution { /** * 合并两个有序链表 * * @param list1 ListNode类 * @param list2 ListNode类 * @return ListNode类 */ public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode dummyHead = new ListNode(0); // 合并后链表的头结点 ListNode mergeListPointer = dummyHead; // 合并链表的指针 ListNode list1Poniter = list1; // list1 的指针 ListNode list2Poniter = list2; // list2 的指针 // 任意一个链表到尾部,则停止循环 while (list1Poniter != null && list2Poniter != null) { // 将小的元素接到 mergeList 的后面 if (list1Poniter.val < list2Poniter.val) { mergeListPointer.next = list1Poniter; list1Poniter = list1Poniter.next; // 指针后移 } else { mergeListPointer.next = list2Poniter; list2Poniter = list2Poniter.next; // 指针后移 } mergeListPointer = mergeListPointer.next; // 指针后移 } // 看看哪个链表还有剩余的部分,将它接在 mergeList 的后面 if (list1Poniter != null) { mergeListPointer.next = list1Poniter; } else { mergeListPointer.next = list2Poniter; } // 返回合并后链表的首结点 return dummyHead.next; } } static class ListNode { int val; ListNode next = null; public ListNode(int val) { this.val = val; } }