兩個有序的鏈表合并

兩個有序的列表合并,合并后的鏈表仍舊保持有序;
L1: 1=>3=>4=>7=>8
L2: 1=>2=>5=>6
合并后的鏈表 p:1=>1=>2=>3=>4=>5=>6=>7=>8;

思路:
1:兩個有序列表都是有序的,所以需要確認下先以哪個鏈表作為新鏈表的起始值,所以需要比較L1和L2的頭節(jié)點值的大??;將頭節(jié)點值小的鏈表賦值給鏈表p;

            if (l1 == null) return l2;
            if (l2 == null) return l1;
            Node<int> temp1 = l1.Head;
            Node<int> temp2 = l2.Head;
            LinkedList<int> p = null;//定義新的鏈表
            if (l1.Head.Data <= l2.Head.Data)//給新的鏈表賦值
            {
                p = l1;
                temp1 = temp1.Next;
            }
            else
            {
                p = l2;
                temp2 = temp2.Next;
            }
            Node<int> temp = p.Head;//p.Head賦值給temp,兩者指向同一個內(nèi)存地址

1.png

所以當(dāng)temp.Next給定一個新的值時,P.Head同時也會賦值;
2:然后同時循環(huán)L1和L2:每次取出L1,L2列表中的第一個元素作比較,將較小的元素插入到鏈表p中,并同時刪除L1或L2中的這個元素;因為會刪除鏈表中的節(jié)點,所以一定會有一個鏈表先為Null,然后需要把另一個列表的剩余元素全部追加到新列表中;
復(fù)雜度分析:
1:L1或者L2其中一個為NULL,并不需要去循環(huán)鏈表,所以時間復(fù)雜度為O(1);
2:L1和L2都不為NULL,整個代碼塊只有一個while,所以時間復(fù)雜度為O(n);將兩個鏈表合并成新的鏈表就會產(chǎn)生N個內(nèi)存地址,所以空間復(fù)雜度為O(n);

   public LinkedList<int> MergeList(LinkedList<int> l1, LinkedList<int> l2)
        {
            if (l1 == null) return l2;
            if (l2 == null) return l1;

            Node<int> temp1 = l1.Head;
            Node<int> temp2 = l2.Head;

            LinkedList<int> p = null;//定義新的鏈表
            if (l1.Head.Data <= l2.Head.Data)//給新的鏈表賦值
            {
                p = l1;
                temp1 = temp1.Next;
            }
            else
            {
                p = l2;
                temp2 = temp2.Next;
            }

            Node<int> temp = p.Head;//p.Head賦值給temp,兩者指向同一個內(nèi)存地址
            while (temp1 != null && temp2 != null)
            {
                if (temp1.Data <= temp2.Data)
                {
                    temp.Next = temp1;
                    temp1 = temp1.Next;
                }
                else
                {
                    temp.Next = temp2;
                    temp2 = temp2.Next;
                }
                temp = temp.Next;
            }

            if (temp1 != null)
            {
                temp.Next = temp1;
            }
            else if (temp2 != null)
            {
                temp.Next = temp2;
            }

            return p;
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法,這個一星期,我總結(jié)了,我所學(xué)習(xí)和思考的單鏈表基礎(chǔ)知識...
    醒著的碼者閱讀 4,731評論 1 45
  • 永遠都停留在小學(xué)三年級的櫻桃小丸子,是我成年之后最愛的動漫人物。小時候小丸子,是看她的可愛搞怪,長大后,才真正看懂...
    zooeyy閱讀 465評論 0 0
  • 文/霍輝 1、女到中年,慫,成了生活的常態(tài) 最近火熱的電影《我不是藥神》,戳痛了窮人的淚點,也道盡了中年女人的心酸...
    霍霍的小世界閱讀 913評論 3 12
  • 金葉,一個兢兢業(yè)業(yè)的人。她很本分,也很勤奮。 高中時代,我和她是同班同學(xué)。她每天早晨是第一個到教室,晚上也是最后一...
    偽悔到來閱讀 164評論 0 0
  • 今天早上發(fā)生了一連串的事情。 我媽媽先為我的改裙子,感到煩惱,就讓奶奶到樓底下幫我改一下,天氣又熱,又悶,我媽媽本...
    艾菲爾上的鐵塔夢幻閱讀 213評論 0 2

友情鏈接更多精彩內(nèi)容