将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
/**
递归
*/
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
if(l1.val < l2.val){
ListNode newLinkedList = mergeTwoLists(l1.next, l2);
l1.next = newLinkedList;
return l1;
}else{
ListNode newLinkedList = mergeTwoLists(l1, l2.next);
l2.next = newLinkedList;
return l2;
}
}
/**
遍历
*/
/*
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 一定有个 虚拟头结点
ListNode head = new ListNode();
// 一定有一个链表的指针
ListNode currentNode = head;
while(l1 != null && l2 != null){ // 什么情况下跳出循环,只要有一个遍历结束就跳出
ListNode node = new ListNode();
currentNode.next = node;
currentNode = node;
if( l1.val < l2.val){
node.val = l1.val;
l1 = l1.next;
}else{
node.val = l2.val;
l2 = l2.next;
}
}
if(l1 == null){ // 把l2的剩余节点全部接过去
while(l2 != null){
ListNode node = new ListNode(l2.val);
currentNode.next = node;
currentNode = node;
l2 = l2.next;
}
}
if(l2 == null){ // 把l1的剩余节点全部接过去
while(l1 != null){
ListNode node = new ListNode(l1.val);
currentNode.next = node;
currentNode = node;
l1 = l1.next;
}
}
return head.next;
}
*/
}
链表遍历模板
// 一定有个 虚拟头结点
ListNode head = new ListNode();
// 一定有个 指向当前节点的指针
ListNode currentNode = head;
while(l1 != null ){ // 什么情况下跳出循环(结束遍历的条件)
l1 = l1.next;
}