算法和数据结构这东西,真的是需要常用常练。这道看似简单的链表合并题,难了我好几个小时,最后还是上网搜索了一种不错算法。后期复习完链表的知识我会将我自己的实现代理贴上。
这个算法巧就巧在用了递归的思想,按照常规方法也能求得,但是就未免太复杂了。
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个有序的链表并将其作为新链表返回。 新链表应通过将前两个列表的节点拼接在一起。
1 public ListNode mergeTwoLists(ListNode l1,ListNode l2){ 2 ListNode newNode; //new一个新的节点作新的链表 3 if (l1 == null && l2 == null) { 4 return null; 5 } 6 if (l1 == null) { //如果L1为空,即L2长度大于L1,所以返回L2剩余节点 7 newNode = l2; 8 return newNode; 9 } 10 if (l2 == null) { //与上同理 11 newNode = l1; 12 return newNode; 13 } 14 if (l1.val > l2.val) { 15 newNode = l2; 16 l2 = l2.next; 17 } else { 18 newNode = l1; 19 l1 = l1.next; 20 } 21 newNode.next = mergeTwoLists(l1, l2); //采取递归思想 22 return newNode; 23 }