题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:
用p q两个指针遍历l1 l2链表
若p.val<=q.val 存p的值 p往后移动一个
>时 存q的值 q往后移动一个
然后再把没遍历的完的链表接上去即可。
代码:
static class ListNode {
int val;
ListNode next;
public ListNode(int x) { val = x; }
}
public static void main(String[] args) {
ListNode aListNode=new ListNode(100);
ListNode bListNode=new ListNode(300);
ListNode cListNode=new ListNode(500);
aListNode.next=bListNode;
bListNode.next=cListNode;
ListNode dListNode=new ListNode(2);
ListNode eListNode=new ListNode(4);
ListNode fListNode=new ListNode(6);
ListNode gListNode=new ListNode(9);
ListNode hListNode=new ListNode(10);
dListNode.next=eListNode;
eListNode.next=fListNode;
fListNode.next=gListNode;
gListNode.next=hListNode;
ListNode root=mergeTwoLists(aListNode, dListNode);
while(root!=null)
{
System.out.print(root.val);
root=root.next;
}
}
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null&&l2==null)
{
return l1;
}
ListNode pListNode=l1;
ListNode qListNode=l2;
ListNode root=new ListNode(0);
ListNode tListNode=root;
while(pListNode!=null&&qListNode!=null)
{
if(pListNode.val<=qListNode.val)
{
tListNode.val=pListNode.val;
pListNode=pListNode.next;
}
else {
tListNode.val=qListNode.val;
qListNode=qListNode.next;
}
tListNode.next=new ListNode(0);
tListNode=tListNode.next;
}
while(pListNode!=null)
{
tListNode.val=pListNode.val;
pListNode=pListNode.next;
if(pListNode!=null)
{
tListNode.next=new ListNode(0);
tListNode=tListNode.next;
}
}
while(qListNode!=null)
{
tListNode.val=qListNode.val;
qListNode=qListNode.next;
if(qListNode!=null)
{
tListNode.next=new ListNode(0);
tListNode=tListNode.next;
}
}
return root;
}