转眼间距离上次写算法题已经快50天了,真是快
算法还是不能丢,以后至少每周一道题!
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:0 <= 链表长度 <= 1000
思路
这个之前应该是写过的
新建一个链表newHeader
两个链表需要新建两个指针,用来指向当前比较的位置
如果两个比较指针都不为空,则循环挨个比较两个节点,值大的使用新链表串联起来
由于两个链表都是递增的,比较完当前的节点,直接找next节点比较即可
如果有一个为null,则跳出循环,将不为空的那个链表剩余节点串联到新的节点后面即可
不难写出:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//边界条件
if (l1 == null) return l2;
if (l2 == null) return l1;
ListNode l1Left = l1;
ListNode l2Left = l2;
ListNode newHeader = new ListNode();
ListNode temp = newHeader;
while (l1Left != null && l2Left != null) {
if (l1Left.val > l2Left.val) {
temp.next = l2Left;
l2Left = l2Left.next;
}else {
temp.next = l1Left;
l1Left = l1Left.next;
}
temp = temp.next;
}
if (l1Left == null) {
temp.next = l2Left;
}
if (l2Left == null) {
temp.next = l1Left;
}
return newHeader.next;
}
}