题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
题目分析:这是一个简单的合并两个有序表达的题目,只需要创建一条新的链表,然后对两条链表进行每个元素比较,将比较小的值连接到新的链表中即可
代码解释:通过while对链表进行遍历,停止的条件是其中一条链表为null时就停止,然后将另外一条比较长的链表直接连接到新的链表的后面即可。
java实现代码如下:
/**
* 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) {
//创建一个逻辑头结点
ListNode temHead = new ListNode(0);
//创建一个指向当前的指针,初始化指向逻辑头指针
ListNode cur = temHead;
while(l1!=null&&l2!=null){//遍历两个链表,当l1,l2不为null时,循环链表
//比较l1,l2的值,当前指针的指向的下一个结点为val比较小的值,并且比较小的节点的指针往后移,准备与另外一条指针上的节点的val进行比较
if(l1.val<=l2.val){
cur.next = l1;//指向小的节点
cur = cur.next;//当前节点往后移一位
l1 = l1.next;//节点往后移
}
else{
cur.next = l2;
cur = cur.next;
l2 = l2.next;
}
}
if(l1!=null){
cur.next = l1;
}
if(l2!=null){
cur.next = l2;
}
return temHead.next;
}
}