<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
        My Github

      劍指Offer面試題:16.合并兩個排序的鏈表

      PS:這也是一道出鏡率極高的面試題,我相信很多童鞋都會很眼熟,就像于千萬人之中遇見不期而遇的人,沒有別的話可說,唯有輕輕地問一聲:“哦,原來你也在這里? ”

      一、題目:合并兩個排序的鏈表

      題目:輸入兩個遞增排序的鏈表,合并這兩個鏈表并使新鏈表中的結點仍然是按照遞增排序的。例如輸入下圖中的鏈表1和鏈表2,則合并之后的升序鏈表如鏈表3所示。

        鏈表結點定義如下,使用C#描述:

          public class Node
          {
              public int Data { get; set; }
              // 指向后一個節點
              public Node Next { get; set; }
      
              public Node(int data)
              {
                  this.Data = data;
              }
      
              public Node(int data, Node next)
              {
                  this.Data = data;
                  this.Next = next;
              }
          }

      二、解題思路

        Step1.定義一個指向新鏈表的指針,暫且讓它指向NULL;

        Step2.比較兩個鏈表的頭結點,讓較小的頭結點作為新鏈表的頭結點;

        Step3.遞歸比較兩個鏈表的其余節點,讓較小的節點作為上一個新節點的后一個節點;

          public Node Merge(Node head1, Node head2)
          {
              if (head1 == null)
              {
                  return head2;
              }
              else if (head2 == null)
              {
                  return head1;
              }
      
              Node newHead = null;
      
              if (head1.Data <= head2.Data)
              {
                  newHead = head1;
                  newHead.Next = Merge(head1.Next, head2);
              }
              else
              {
                  newHead = head2;
                  newHead.Next = Merge(head1, head2.Next);
              }
      
              return newHead;
          }

      三、單元測試

      3.1 測試準備

       ?。?)借助MSUnit框架進行初始化與清理工作[TestInitialize]與[TestCleanup]

          private MergeHelper mergeHelper;
      
          [TestInitialize]
          public void Initialize()
          {
              // 實例化
              mergeHelper = new MergeHelper();
          }
      
          [TestCleanup]
          public void CleanUp()
          {
              // 不用TA了
              mergeHelper = null;
          } 

        (2)封裝一個便于測試對比的輔助方法,將新鏈表生成一個字符串用于對比

          public string GetListString(Node head)
          {
              if (head == null)
              {
                  return null;
              }
      
              StringBuilder sbList = new StringBuilder();
              while (head != null)
              {
                  sbList.Append(head.Data.ToString());
                  head = head.Next;
              }
      
              return sbList.ToString();
          } 

      3.2 測試用例

        (1)功能測試

          // list1: 1->3->5
          // list2: 2->4->6
          [TestMethod]
          public void MergeTest1()
          {
              Node node1 = new Node(1);
              Node node3 = new Node(3);
              Node node5 = new Node(5);
      
              node1.Next = node3;
              node3.Next = node5;
      
              Node node2 = new Node(2);
              Node node4 = new Node(4);
              Node node6 = new Node(6);
      
              node2.Next = node4;
              node4.Next = node6;
      
              Node newHead = mergeHelper.Merge(node1, node2);
              Assert.AreEqual(GetListString(newHead), "123456");
          }
      
          // 兩個鏈表中有重復的數字
          // list1: 1->3->5
          // list2: 1->3->5
          [TestMethod]
          public void MergeTest2()
          {
              Node node1 = new Node(1);
              Node node3 = new Node(3);
              Node node5 = new Node(5);
      
              node1.Next = node3;
              node3.Next = node5;
      
              Node node2 = new Node(1);
              Node node4 = new Node(3);
              Node node6 = new Node(5);
      
              node2.Next = node4;
              node4.Next = node6;
      
              Node newHead = mergeHelper.Merge(node1, node2);
              Assert.AreEqual(GetListString(newHead), "113355");
          } 

        (2)特殊輸入測試

          // 兩個鏈表都只有一個數字
          // list1: 1
          // list2: 2
          [TestMethod]
          public void MergeTest3()
          {
              Node node1 = new Node(1);
              Node node2 = new Node(2);
      
              Node newHead = mergeHelper.Merge(node1, node2);
              Assert.AreEqual(GetListString(newHead), "12");
          }
      
          // 兩個鏈表中有一個空鏈表
          // list1: 1->3->5
          // list2: null
          [TestMethod]
          public void MergeTest4()
          {
              Node node1 = new Node(1);
              Node node3 = new Node(3);
              Node node5 = new Node(5);
      
              node1.Next = node3;
              node3.Next = node5;
      
              Node newHead = mergeHelper.Merge(node1, null);
              Assert.AreEqual(GetListString(newHead), "135");
          }
      
          // 兩個鏈表都是空鏈表
          // list1: null
          // list2: null
          [TestMethod]
          public void MergeTest5()
          {
              Node newHead = mergeHelper.Merge(null, null);
              Assert.AreEqual(GetListString(newHead), null);
          } 

      3.3 測試結果

       ?。?)測試通過情況

       ?。?)代碼覆蓋率

       

      posted @ 2015-08-30 20:09  EdisonZhou  閱讀(3468)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 一亚洲一区二区中文字幕 | chinese性内射高清国产| 国模雨珍浓密毛大尺度150p| 福利视频一区二区在线| 亚洲无码精品视频| 大香蕉av一区二区三区| 国产成人精品无码免费看夜聊软件| 国产精品成人无码久久久| 2020国产欧洲精品网站| 日韩国产精品中文字幕| 午夜福利免费区在线观看| 自拍视频在线观看成人| 99久久精品国产一区色| 人妻少妇精品中文字幕| 亚洲精品成人片在线观看精品字幕 | 亚洲av综合色区在线观看| 宝贝腿开大点我添添公视频免| 左云县| 色熟妇人妻久久中文字幕| 人人妻人人妻人人片av| 亚洲狠狠婷婷综合久久久| 农村老熟妇乱子伦视频| 国产互换人妻xxxx69| 国产高颜值极品嫩模视频| 暖暖 免费 高清 日本 在线观看5 色老头亚洲成人免费影院 | 无码日韩av一区二区三区| 国产成人啪精品视频免费网| 国产亚洲精品黑人粗大精选| 精品一区二区三区无码视频| 国产99久久亚洲综合精品西瓜tv| 狠狠躁夜夜躁无码中文字幕| 精品视频一区二区福利午夜| 国产伦码精品一区二区| 国产乱码精品一区二三区| 99久久婷婷国产综合精品青草漫画| a级黑人大硬长爽猛出猛进| 久久热在线视频精品视频| 秭归县| 国产日本一区二区三区久久| 久久人妻少妇嫩草av无码专区| 浪潮av色综合久久天堂|