您的位置:首页 > 职场人生

【Java】 面试题25:合并两个排序的链表

2019-03-14 15:00 351 查看

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然使递增排序的。

题目分析
  假如List1中的头节点是小于List2中的,那么新的链表的头节点必将是List1的头节点,同理对List2也一样,那么在比较完头节点之后,再将List1中的下一个节点再与List2中的头节点比较,同样谁小谁进入新链表,然后再比较,直到两个链表比较完,故可用非递归或递归两种方式来做。

递归求解:

package jianZhiOffer;
/*
* 面试题25:合并两个排序的链表
* 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然使递增排序的。
*/
public class Demo25 {
public static ListNode Merge(ListNode pHead1,ListNode pHead2) {
if(pHead1 == null)
return pHead2;
else if(pHead2 == null)
return pHead1;

ListNode pMergedHead = null;
if(pHead1.val < pHead2.val) {
pMergedHead = pHead1;
pMergedHead.next = Merge(pHead1.next,pHead2);
}else {
pMergedHead = pHead2;
pMergedHead.next = Merge(pHead1,pHead2.next);
}
return pMergedHead;
}

private static void printNodeList(ListNode head) {
if(head == null)
return ;
ListNode node = head.next.next;
while(node !=null) {
System.out.print(node.val);
node = node.next;
if(node != null)
System.out.print("->");
}
}
public static void main(String[] args) {
int[] num1 = {1,3,5,7};
int[] num2 = {2,4,6,8};
ListNode head1 = new ListNode();
ListNode pre1 = head1;
for(int i=0;i<num1.length;i++) {
ListNode node = new ListNode(num1[i]);
pre1.next = node;
pre1 = node;
}

ListNode head2 = new ListNode();
ListNode pre2 = head2;
for(int i=0;i<num2.length;i++) {
ListNode node = new ListNode(num2[i]);
pre2.next = node;
pre2 = node;
}

ListNode merge = Merge(head1,head2);
printNodeList(merge);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: