public void RemoveNthNodeFromEndOfListTestCase5()
        {
            var list   = CommonHelpers.GetLinkedListFromArray(new[] { 1, 2, 3 });
            var output = RemoveNthNodeFromEndOfList.RemoveNthFromEnd(list, 3).ValuesToFlatList();

            output.SequenceEqual(new[] { 2, 3 }).Should().BeTrue();
        }
        public void RemoveNthFromEnd(ListNode head, int n, ListNode expected)
        {
            var sut    = new RemoveNthNodeFromEndOfList();
            var actual = sut.RemoveNthFromEnd(head, n);

            Assert.AreEqual(JsonConvert.SerializeObject(expected), JsonConvert.SerializeObject(actual));
        }
        public void Given_5_linked_node_When_remove_2th_from_end_of_List_Then_2th_from_end_removed()
        {
            ListNode node = new ListNode(1)
            {
                next = new ListNode(2)
                {
                    next = new ListNode(3)
                    {
                        next = new ListNode(4)
                        {
                            next = new ListNode(5)
                        }
                    }
                }
            };

            var result = RemoveNthNodeFromEndOfList.RemoveNthFromEnd(node, 2);


            while (result != null)
            {
                Assert.AreNotEqual(4, result.val);
                result = result.next;
            }
        }
        public void Given_1_linked_node_When_remove_1th_from_end_of_List_Then_empty()
        {
            ListNode node = new ListNode(1)
            {
            };

            var result = RemoveNthNodeFromEndOfList.RemoveNthFromEnd(node, 1);

            Assert.AreEqual(null, result);
        }
        public void RemoveNthFromEndTest()
        {
            // 删除中间结点
            ListNode headA = new ListNode(1);
            ListNode node2 = new ListNode(2);
            ListNode node3 = new ListNode(3);
            ListNode node4 = new ListNode(4);
            ListNode node5 = new ListNode(5);
            ListNode node6 = new ListNode(6);

            headA.next = node2;
            node2.next = node3;
            node3.next = node4;
            node4.next = node5;
            node5.next = node6;

            ListNode headB  = new ListNode(1);
            ListNode nodeB2 = new ListNode(2);
            ListNode nodeB3 = new ListNode(3);
            ListNode nodeB4 = new ListNode(4);
            ListNode nodeB6 = new ListNode(6);

            headB.next  = nodeB2;
            nodeB2.next = nodeB3;
            nodeB3.next = nodeB4;
            nodeB4.next = nodeB6;

            headA = new RemoveNthNodeFromEndOfList().RemoveNthFromEnd(headA, 2);

            var isEqual = true;

            while (true)
            {
                if (headA == null || headB == null)
                {
                    isEqual = headA == headB;
                    break;
                }

                if (headA.val == headB.val)
                {
                    headA = headA.next;
                    headB = headB.next;
                }
                else
                {
                    isEqual = false;
                    break;
                }
            }

            Assert.IsTrue(isEqual);
        }
        public void RemoveNthFromEndTest1()
        {
            // 删除头结点
            ListNode headA = new ListNode(1);
            ListNode node2 = new ListNode(2);

            headA.next = node2;

            ListNode headB = node2;

            headA = new RemoveNthNodeFromEndOfList().RemoveNthFromEnd(headA, 2);

            var isEqual = true;

            while (true)
            {
                if (headA == null || headB == null)
                {
                    isEqual = headA == headB;
                    break;
                }

                if (headA.val == headB.val)
                {
                    headA = headA.next;
                    headB = headB.next;
                }
                else
                {
                    isEqual = false;
                    break;
                }
            }

            Assert.IsTrue(isEqual);
        }