21. Merge Two Sorted Lists
阿新 • • 發佈:2021-11-02
LeetCode、連結串列
SLinkedList<int> slist = new SLinkedList<int>(); slist.Append(1); slist.Append(2); slist.Append(4); Console.WriteLine(slist.Print()); SLinkedList<int> slist2 = new SLinkedList<int>(); slist2.Append(1); slist2.Append(3); slist2.Append(4); Console.WriteLine(slist2.Print()); Console.WriteLine("MergeTwoList"); var rslt = slist.MergeTwoList(slist2); Console.WriteLine(rslt.Print());
/// <summary> /// 合併 2 個有序連結串列 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="source"></param> /// <param name="source2"></param> /// <returns></returns> public static SLinkedList<T> MergeTwoList<T>(this SLinkedList<T> source, SLinkedList<T> source2) where T : IComparable<T> { var temp = new SLinkedList<T>(source); temp.SelectionSort(); var temp2 = new SLinkedList<T>(source2); temp2.SelectionSort(); var node = MergeTwoListImp(temp.Head, temp2.Head); var rslt = new SLinkedList<T>(); while (node != null) { rslt.Append(node.Data); node = node.Next; } return rslt; } static SLinkedListNode<T> MergeTwoListImp<T>(SLinkedListNode<T> node1, SLinkedListNode<T> node2) where T : IComparable<T> { if (node1 == null) { return node2; } if (node2 == null) { return node1; } if (node1.Data.IsLessThan(node2.Data)) { node1.Next = MergeTwoListImp(node1.Next, node2); return node1; } node2.Next = MergeTwoListImp(node1, node2.Next); return node2; }