合并两个排序的链表
2019-03-17 21:07
48 查看
版权声明:如需转载,请写明出处 https://blog.csdn.net/weixin_43113679/article/details/88626857
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null){ return list2; } if(list2 == null){ return list1; } ListNode ln1; ListNode ln; if(list1.val<=list2.val){ ln =list1; list1 = list1.next; }else{ ln =list2; list2 = list2.next; } ln1 =ln; while(true){ if(list1==null||list2==null){ break; } if(list1.val<=list2.val){ ln.next =list1; ln = ln.next; list1 = list1.next; } else{ ln.next =list2; ln = ln.next; list2 =list2.next; } } if(list1==null){ ln.next = list2; }else{ ln.next = list1; } return ln1; } }
这我犯了一个错误,在while语句判定我一开始用的是list1!=null||list2!=null,会报不存在,后来才想到,不应该这样写,因为一个有null的话,再用.val肯定会报不存在错误。
思路:先创建两个链表,ln1用于返回(相当于表头),ln2用于从list1和list2转移结点(比较大小,谁小就把它加进新的链表尾部,直到有一个链表为空,把另一个链表的结点直接连到新链表就完成了),构成新的链表所以ln2肯定会移动,最后返回肯定ln2肯定不对。
相关文章推荐
- 剑指Offer 链表相关问题--从尾到头打印链表、合并两个排序的链表
- 牛客 剑 二维数组中的查找、重建二叉树(前中建树)、【链表】合并两个排序的链表(递归)、【数组】和为S的两个数字、【字符串】左旋转字符串(递归)、【树】把二叉树打印成多行(层数的处理)
- lintcode 165 合并两个排序链表
- 合并两个排序链表
- LintCode—合并两个排序链表(165)
- 剑指offer 16 合并两个排序的链表
- 165. 合并两个排序链表
- 用C语言合并两个按递增排序的链表
- C++实现合并两个排序的链表
- 17.合并两个排序的链表|剑指Offer
- 合并两个排序链表
- 13、合并两个排序好的链表
- 合并两个排序的链表
- 合并两个排序的链表
- 剑指offer 面试题17: 合并两个排序的链表 题解
- 合并两个排序的链表
- [LintCode]165.合并两个排序链表
- 合并两个排序的链表
- 合并两个排序的链表(递归算法)
- 剑指offer(13)-合并两个排序的链表