题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:从两链表第一个结点开始比较结点的值,取较小者作为合并链表的元素,依次进行;后面如果有一个链表为空,则直接把不为空的链表接到合并链表的后面。
方法1.采用非递归方法
/**
* 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 temp1=l1;
ListNode temp2=l2;
ListNode ret=new ListNode(0);
ListNode ret1=ret;
while(temp1!=null&&temp2!=null)
{
if(temp1.val>temp2.val)
{
ret.next=temp2;
ret=ret.next;
temp2=temp2.next;
}else
{
ret.next=temp1;
ret=ret.next;
temp1=temp1.next;
}
}
if(temp1==null&&temp2!=null)
{
ret.next=temp2;
}
if(temp2==null&&temp1!=null)
{
ret.next=temp1;
}
return ret1.next;
}
}
方法二.采用递归方法(待优化)
/**
* 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 temp1=l1;
ListNode temp2=l2;
ListNode ret=getResult(temp1,temp2);
return ret;
}
public ListNode getResult(ListNode t1,ListNode t2)
{
ListNode t0=new ListNode(0);
ListNode head=t0;
if(t1==null)
return t2;
if(t2==null)
return t1;
if(t1.val>t2.val)
{
t0.next=t2;
t0=t0.next;
t0.next=getResult(t1,t2.next);
}else
{
t0.next=t1;
t0=t0.next;
t0.next=getResult(t1.next,t2);
}
return head.next;
}
}
最后
以上就是细腻饼干最近收集整理的关于leetcode之合并两个有序链表的全部内容,更多相关leetcode之合并两个有序链表内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复