21. Merge Two Sorted Lists 合并两个已排序的链表
题目描述已经给的十分清晰了,不再重复;
思路:(1)创建表头,用于返回合并后的新链表的用途;
(2)创建跟踪指针:index;
(3)然后层次分为两部分 A:管理两个已排序链表都有值的情况;
B:管理当一方链表没有值的情况;
A当中:利用循环不断比较每次l1和l2前面的两个元素,选择较小的加入index所指向的链表节点末尾;并且,重新定位index和修改后的节点(lx)的位置;
B当中:将依然存在有值的链表收入index;
考虑到,在A当中,比较可能相等的情况,所以if条件关系的划分很关键,需要注意!
另外需要指出的是,这个算法用到了归并排序当中merge核心的思想,相当直接借鉴!!!
但是,区别在于,这里不能把B部分归入A部分的循环当中,因为:第一,这样带来了不必要的链表操作。第二,如果不那么做,存在是嵌入continue还是return的问题。
public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head = new ListNode(0);//表头!! ListNode index = head; while(l1 != null && l2 != null) { if(l1.val < l2.val) { index.next = l1; l1 = l1.next; index = index.next; } else { index.next = l2; l2 = l2.next; index = index.next; } } if(l2 != null) { index.next = l2; } if(l1 != null) { index.next = l1; } return head.next; } }

浙公网安备 33010602011771号