image-20220325084931873.png

去年数据结构也考了…

递归

  1. /**
  2. * Definition for singly-linked list.
  3. * public class ListNode {
  4. * int val;
  5. * ListNode next;
  6. * ListNode() {}
  7. * ListNode(int val) { this.val = val; }
  8. * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  9. * }
  10. */
  11. class Solution {
  12. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  13. if (l1 == null){
  14. return l2;
  15. }
  16. else if (l2 == null) {
  17. return l1;
  18. }
  19. else if (l1.val < l2.val) {
  20. l1.next = mergeTwoLists(l1.next, l2);
  21. return l1;
  22. }
  23. else {
  24. l2.next = mergeTwoLists(l1, l2.next);
  25. return l2;
  26. }
  27. }
  28. }

迭代

有点没看懂

  1. class Solution {
  2. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
  3. ListNode prehead = new ListNode(-1);
  4. ListNode prev = prehead;
  5. while (l1 != null && l2 != null) {
  6. if (l1.val <= l2.val) {
  7. prev.next = l1;
  8. l1 = l1.next;
  9. } else {
  10. prev.next = l2;
  11. l2 = l2.next;
  12. }
  13. prev = prev.next;
  14. }
  15. // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
  16. prev.next = l1 == null ? l2 : l1;
  17. return prehead.next;
  18. }
  19. }