递归特别短!没这种思维!
自己用那种最直白的两个两个相比换指针指向 导致会有空情况等特殊情况出错
看了题解是用递归什么的 扩展一下这种思路 而且可以采用给链表加一个空头结点来避免特殊情况的判断
还有 链表中 A.next=B 是说将A的next指针指向B 和常用的赋值是不一样的
周五看的题解 周一写的
迭代:
class Solution { public static ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode list=new ListNode(-1); ListNode temp=list,temp1=list1,temp2=list2; while(temp1!=null&&temp2!=null) { if(temp1.val<temp2.val) { temp.next=temp1; temp=temp.next; temp1=temp1.next; } else{ temp.next=temp2; temp=temp.next; temp2=temp2.next; } } if(temp1==null) { temp.next=temp2; } if(temp2==null) { temp.next=temp1; } return list.next; } }
我写的烂烂代码
package Leetcode; class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } public class Leetcode21 { public static void main(String[] args) { // TODO Auto-generated method stub ListNode list1=new ListNode(2); ListNode list2=new ListNode(1); ListNode list=Leetcode21.mergeTwoLists(list1, list2); } public static ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode temp=null; if(list1==null){ return list2; } if(list2==null){ return list1; } if(list1.val>list2.val){ temp=list2;//temp指向list2 list2=list1; list1=temp; } ListNode l1=list1,l2=list2,pre=null; while(l1!=null||l2!=null) { while(l1!=null && l1.val<=l2.val && l2!=null) {//1不空 且1值小于等于2 移动到第一个大于当前 2的位置 pre=l1; l1=l1.next; } if(l2==null) { return list1; } pre.next=l2; if(l1==null) { return list1; } l2=l2.next; pre.next.next=l1; } return list1; } }
标签:力扣,ListNode,21,val,list1,list2,链表,next,null From: https://www.cnblogs.com/ayuanjiejie/p/17210442.html