public LinkedListNodeSM AddTwoLinkedListTogetherSm(LinkedListSM linkedListSm, LinkedListSM linkedListSm2) { LinkedListNodeSM result = new LinkedListNodeSM(-1); LinkedListNodeSM resulthead = result; int carryOver = 0; while (linkedListSm.Head != null || linkedListSm2.Head != null) { int sum = (linkedListSm.Head?.Data ?? 0) + (linkedListSm2.Head?.Data ?? 0) + carryOver; int d = sum % 10; carryOver = sum / 10; result.Next = new LinkedListNodeSM(d); if (linkedListSm.Head != null) { linkedListSm.Head = linkedListSm.Head.Next; } if (linkedListSm2.Head != null) { linkedListSm2.Head = linkedListSm2.Head.Next; } result = result.Next; } if (carryOver > 0) { result.Next = new LinkedListNodeSM(carryOver); } return(resulthead.Next); }
public bool DetectAndRemoveLoopSm(LinkedListSM linkedListSM) { LinkedListNodeSM slow = linkedListSM.Head; LinkedListNodeSM fast = linkedListSM.Head; while (slow != null && fast != null && fast.Next != null) { slow = slow.Next; fast = fast.Next.Next; if (slow == fast) { removeLoop(slow, linkedListSM.Head); return(true); } } return(false); }
public LinkedListNodeSM MergeTwoSortedLinkedListSm(LinkedListSM linkedListSm, LinkedListSM linkedListSm2) { LinkedListNodeSM headFirst = linkedListSm.Head; LinkedListNodeSM headSecond = linkedListSm2.Head; LinkedListNodeSM dummy = new LinkedListNodeSM(-1); LinkedListNodeSM dummyHead = dummy; while (headFirst != null && headSecond != null) { if (headFirst.Data < headSecond.Data) { dummy.Next = headFirst; headFirst = headFirst.Next; } else { dummy.Next = headSecond; headSecond = headSecond.Next; } dummy = dummy.Next; } while (headFirst != null) { dummy.Next = headFirst; headFirst = headFirst.Next; dummy = dummy.Next; } while (headSecond != null) { dummy.Next = headSecond; headSecond = headSecond.Next; dummy = dummy.Next; } return(dummyHead.Next); }