zoukankan      html  css  js  c++  java
  • 链表:合并两个有序链表

    题目:

    给定两个有序单链表的头节点 head1 和 head2,请合并两个有序链表,合并后的链表依然有序,并返回合并后的头节点。

    例如:

    0->2->3->7->null

    1->3->5->7->9->null

    0->1->2->3->3->5->7->7->9->null

    分析:

    1. 如果某个链表为空,直接返回另一链表头节点即可。

    2. 记录较小的头节点即为最后返回节点,记为 head。

    3. 将cur1指向较小的头节点,另一个为cur2,遍历cur1和cur2,如果cur1的值不大于cur2则,cur1指向下一个节点,否则将cur1.next赋为cur2,cur2指向下一个节点,重新判断cur1的值与cur2的值的大小。

    4. 最后将剩余的节点连接到新链表的后面

     1 public Node merge(Node head1, Node head2)
     2 {
     3     if(head1 == null || head2 == null)
     4         return head1 == null ? head2 : head1;
     5 
     6     Node head = head1.data < head2.data ? head1 : head2;
     7     Node cur1 = head == head1 ? head1 : head2;
     8     Node cur2 = head == head1 ? head2 : head1;
     9     Node pre = null, next = null;
    10 
    11     while(cur1 != null && cur2 != null)
    12     {
    13         if(cur1.data <= cur2.data)
    14         {
    15             pre = cur1;
    16             cur1 = cur1.next;
    17         }
    18         else
    19         {
    20             next = cur2.next;
    21             pre.next = cur2;
    22             cur2.next = cur1;
    23             pre = cur2;
    24             cur2 = next;
    25         }
    26     }
    27     pre.next = cur1 == null ? cur2 : cur1;
    28     return head;
    29 }

    参考资料:程序员代码面试指南 IT名企算法与数据结构题目最优解,左程云

  • 相关阅读:
    RQNOJ 34 紧急援救
    Codevs 2080 特殊的质数肋骨
    POJ2975 Nim
    Bzoj1016 最小生成树计数
    POJ3613 Cow Relays
    POJ1386 Play on Words
    [从hzwer神犇那翻到的模拟赛题] 合唱队形
    HDU2824 The Euler function
    HDU1576 A/B
    HDU2669 Romantic
  • 原文地址:https://www.cnblogs.com/2015110615L/p/6663589.html
Copyright © 2011-2022 走看看