合并两个有序链表--参考归并排序
合并两个有序链表是很常见的一个链表相关的算法题,因为当时在练习这个题的时候,刚学完排序算法没多久,所以我在练这个题的时候第一反应就是使用归并排序的“并”的思想。当然,我并没有去算过这个算法的时间复杂度,因为目前阶段只要能做出来就好了,哈哈哈(来自一个算法菜鸟的兴奋!!!),代码如下(虽然代码看起来有点啰嗦,其实还是很简单的,很多代码都一样):
package cn.czy.algorithm.linkedlist; /** * 合并两个有序列表,思路参考归并排序的并过程 */ public class MergeTwoLinked { public static void main(String[] args) { ListNode node1=new ListNode(1); ListNode node2=new ListNode(2); ListNode node3=new ListNode(3); ListNode node4=new ListNode(4); node3.next=node4; node2.next=node3; node1.next=node2; ListNode node5=new ListNode(0); ListNode node6=new ListNode(1); ListNode node7=new ListNode(2); ListNode node8=new ListNode(4); node7.next=node8; node6.next=node7; node5.next=node6; ListNode head = mergeTwoLinked(node1, node5);//调用合并方法 while (head!=null){//输出链表节点 System.out.println(head.toString()); head=head.next; } } /** * 合并两个有序列表,思路参考归并排序的并过程 * @param head1 * @param head2 * @return 返回合并后的链表 */ public static ListNode mergeTwoLinked(ListNode head1, ListNode head2) { if(head1==null && head2==null){//当两个链表都为空时返回null return null; }else if(head1!=null && head2==null){//当第2个链表为null时返回第1个链表 return head1; }else if(head1==null && head2!=null){//当第1个链表为null时返回第2个链表 return head2; } ListNode head;//定义合并后的链表的头指针 ListNode next;//用于记录新链表的头结点的下一个节点 //当第1个链表的第一个节点的值小于第2个链表的第一个节点的值时,将新链表的头结点指向第1个链表 if(head1.val<head2.val){ next=head1.next; head1.next=null; head=head1; head1=next; }else{//当第1个链表的第一个节点的值大于等于第2个链表的第一个节点的值时,将新链表的头结点指向第2个链表 next=head2.next; head2.next=null; head=head2; head2=next; } ListNode temp=head;//用于遍历新链表 while (head1 != null && head2 != null) {//根据节点值的大小拼接到新链表后面,当有一个链表已经遍历完后退出 if (head1.val<head2.val){ next=head1.next; head1.next=null; temp.next=head1; head1=next; temp=temp.next; }else{ next=head2.next; head2.next=null; temp.next=head2; head2=next; temp=temp.next; } } if (head1!=null){//当第1个链表不为null时,直接拼接在新链表后面 temp.next=head1; } if (head2!=null){//当第2个链表不为null时,直接拼接在新链表后面 temp.next=head2; } return head; } } class ListNode { int val; ListNode next; public ListNode(int x) { val = x; } @Override public String toString() { return "ListNode{" + "val=" + val + '}'; } }


浙公网安备 33010602011771号