21. 合并两个有序链表 --by 递归
public ListNode solution(ListNode l1, ListNode l2){ if(l1 == null)return l2; if(l2 == null)return l1; ListNode res = new ListNode(); ListNode result = res; while(l1 != null && l2 != null){ if(l1.val < l2.val){ res.next = l1; res = res.next; l1 = l1.next; }else{ res.next = l2; res = res.next; l2 = l2.next; } } res.next = l1 == null ? l2 : l1; return result.next; }
思路比较简单,申请一个res节点,每次比较两个链表的节点值,将res的next域指向较小的那个节点,移动值较小的链表的指针,继续比较,同时res = res.next; 最后将剩下的一段链表接上就ok;
递归版本
首先确定子问题,确定函数的结构,这里我们需要比较两个节点的大小,然后是链接较小值的节点,最后返回最小值即可,当然还需考虑两个边界情况。
public ListNode recursion(ListNode l1, ListNode l2){ if(l1 == null)return l2; if(l2 == null)return l1; if(l1.val < l2.val){ l1.next = recursion(l1.next,l2); } else{ l2.next = recursion(l1,l2.next); } return l1.val < l2.val ? l1 : l2; }

浙公网安备 33010602011771号