// A list has multiple nodes, with a loop void Test_23_5() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode5); Test_23("Test_23_5", pNode1, pNode5); delete pNode1; pNode1 = nullptr; delete pNode2; pNode2 = nullptr; delete pNode3; pNode3 = nullptr; delete pNode4; pNode4 = nullptr; delete pNode5; pNode5 = nullptr; }
// A list has multiple nodes, with a loop void Test3() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode3); Test("Test3", pNode1, pNode3); delete pNode1; pNode1 = NULL; delete pNode2; pNode2 = NULL; delete pNode3; pNode3 = NULL; delete pNode4; pNode4 = NULL; delete pNode5; pNode5 = NULL; }
// 两个链表都只有一个数字 // list1: 1 // list2: 2 void Test3() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pMergedHead = Test("Test3", pNode1, pNode2); DestroyList(pMergedHead); }
// 一个链表为空链表 // list1: 1->3->5 // list2: 空链表 void Test4() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = CreateListNode(3); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode3); ConnectListNodes(pNode3, pNode5); ListNode* pMergedHead = Test("Test4", pNode1, NULL); DestroyList(pMergedHead); }
// a list with only two duplidated nodes void Test9() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(1); ConnectListNodes(pNode1, pNode2); ListNode* pHead = pNode1; Test("Test9", &pHead, NULL, 0); DestroyList(pHead); }
// all nodes are duplicated in pairs void Test5() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(1); ListNode* pNode3 = CreateListNode(2); ListNode* pNode4 = CreateListNode(2); ListNode* pNode5 = CreateListNode(3); ListNode* pNode6 = CreateListNode(3); ListNode* pNode7 = CreateListNode(4); ListNode* pNode8 = CreateListNode(4); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode6); ConnectListNodes(pNode6, pNode7); ConnectListNodes(pNode7, pNode8); ListNode* pHead = pNode1; Test("Test5", &pHead, NULL, 0); DestroyList(pHead); }
int main(int argc, const char * argv[]) { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ConnectListNode(pNode1,pNode2); ConnectListNode(pNode2,pNode3); PrintListInRecursiveOrder(pNode1); return 0; }
// a list with two unique nodes void Test7() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ConnectListNodes(pNode1, pNode2); ListNode* pHead = pNode1; int expectedValues[] = {1, 2}; Test("Test7", &pHead, expectedValues, sizeof(expectedValues)/sizeof(int)); DestroyList(pHead); }
// nodes are duplicated in pairs except two void Test6() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(1); ListNode* pNode3 = CreateListNode(2); ListNode* pNode4 = CreateListNode(3); ListNode* pNode5 = CreateListNode(3); ListNode* pNode6 = CreateListNode(4); ListNode* pNode7 = CreateListNode(5); ListNode* pNode8 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode6); ConnectListNodes(pNode6, pNode7); ConnectListNodes(pNode7, pNode8); ListNode* pHead = pNode1; int expectedValues[] = {2, 4}; Test("Test6", &pHead, expectedValues, sizeof(expectedValues)/sizeof(int)); DestroyList(pHead); }
/**************************************************************************** * Function: ListAddAfter * * Description: * Adds a node after the specified node. * Node gets added immediately after bnode. * Parameters: * LinkedList *list - must be valid, non null, pointer to a linked list. * void * item - item to be added * ListNode * bnode - node to add after * Returns: * The pointer to the ListNode on success, NULL on failure. * Precondition: * The list has been initialized. *****************************************************************************/ ListNode * ListAddAfter( LinkedList * list, void *item, ListNode * bnode ) { ListNode *newNode = NULL; assert( list != NULL ); if( ( list == NULL ) || ( bnode == NULL ) ) return NULL; newNode = CreateListNode( item, list ); if( newNode ) { ListNode *temp = bnode->next; bnode->next = newNode; newNode->prev = bnode; newNode->next = temp; temp->prev = newNode; list->size++; return newNode; } return NULL; }
/**************************************************************************** * Function: ListAddBefore * * Description: * Adds a node before the specified node. * Node gets added immediately before anode. * Parameters: * LinkedList *list - must be valid, non null, pointer to a linked list. * ListNode * anode - node to add the in front of. * void * item - item to be added * Returns: * The pointer to the ListNode on success, NULL on failure. * Precondition: * The list has been initialized. *****************************************************************************/ ListNode * ListAddBefore( LinkedList * list, void *item, ListNode * anode ) { ListNode *newNode = NULL; assert( list != NULL ); if( ( list == NULL ) || ( anode == NULL ) ) return NULL; newNode = CreateListNode( item, list ); if( newNode ) { ListNode *temp = anode->prev; anode->prev = newNode; newNode->next = anode; newNode->prev = temp; temp->next = newNode; list->size++; return newNode; } return NULL; }
// A list has a node, without a loop void Test_23_1() { ListNode* pNode1 = CreateListNode(1); Test_23("Test_23_1", pNode1, nullptr); DestroyList(pNode1); }
// A list has multiple nodes, without a loop void Test_23_6() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); Test_23("Test_23_6", pNode1, nullptr); DestroyList(pNode1); }
// A list has multiple nodes, without a loop void Test6() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); Test("Test6", pNode1, NULL); DestroyList(pNode1); }
// A list has a node, without a loop void Test1() { ListNode* pNode1 = CreateListNode(1); Test("Test1", pNode1, NULL); DestroyList(pNode1); }
// 输入的链表有多个结点 void Test1() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ListNode* pReversedHead = Test(pNode1); DestroyList(pReversedHead); }
// 输入的链表只有一个结点 void Test2() { ListNode* pNode1 = CreateListNode(1); ListNode* pReversedHead = Test(pNode1); DestroyList(pReversedHead); }
// A list has only one node void Test4() { ListNode* pNode1 = CreateListNode(1); ListNode* pHead = pNode1; Test("Test4", &pHead); DestroyList(pHead); }
// 第一个公共结点在链表中间 // 1 - 2 - 3 \ // 6 - 7 // 4 - 5 / void Test1() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ListNode* pNode6 = CreateListNode(6); ListNode* pNode7 = CreateListNode(7); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode6); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode6); ConnectListNodes(pNode6, pNode7); Test("Test1", pNode1, pNode4, pNode6); DestroyNode(pNode1); DestroyNode(pNode2); DestroyNode(pNode3); DestroyNode(pNode4); DestroyNode(pNode5); DestroyNode(pNode6); DestroyNode(pNode7); }
void InsertInLinkedList(struct ListNode **head, int data, int index){ struct ListNode *newNode= CreateListNode(data); if(index==0){ newNode->data=data; newNode->next=*head; **head=*newNode; } else{ for(int i=0;i<index-1;i++){ top=top->next; } struct ListNode *node = CreateListNode(data); node->next=top->next; top->next=node; } }
// A list has a node, with a loop void Test2() { ListNode* pNode1 = CreateListNode(1); ConnectListNodes(pNode1, pNode1); Test("Test2", pNode1, pNode1); delete pNode1; pNode1 = NULL; }
void Test1() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("Expected result: 4 \n"); ListNode* pNode = FindKthToTail(pNode1, 2); PrintListNode(pNode); DestroyList(pNode1); }
// 只有一个结点的链表: 1 void Test2() { printf("\nTest2 begins.\n"); ListNode* pNode1 = CreateListNode(1); Test(pNode1); DestroyList(pNode1); }
// 1->2->3->4->5 void Test1() { printf("\nTest1 begins.\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); Test(pNode1); DestroyList(pNode1); }
// A list has a node, with a loop void Test_23_2() { ListNode* pNode1 = CreateListNode(1); ConnectListNodes(pNode1, pNode1); Test_23("Test_23_2", pNode1, pNode1); delete pNode1; pNode1 = nullptr; }
// 测试要找的结点是链表的头结点 void Test3() { printf("=====Test3 starts:=====\n"); ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); printf("expected result: 1.\n"); ListNode* pNode = FindKthToTail(pNode1, 5); PrintListNode(pNode); DestroyList(pNode1); }
// only one node in a list void Test8() { ListNode* pNode1 = CreateListNode(1); ConnectListNodes(pNode1, NULL); ListNode* pHead = pNode1; int expectedValues[] = {1}; Test("Test8", &pHead, expectedValues, sizeof(expectedValues)/sizeof(int)); DestroyList(pHead); }
ListNode* BuildList() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5); ListNode* pNode6 = CreateListNode(6); ListNode* pNode7 = CreateListNode(7); ListNode* pNode8 = CreateListNode(8); ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5); ConnectListNodes(pNode5, pNode6); ConnectListNodes(pNode6, pNode7); ConnectListNodes(pNode7, pNode8); return pNode1; }
// 两个链表中有重复的数字 // list1: 1->3->5 // list2: 1->3->5 void Test2() { ListNode* pNode1 = CreateListNode(1); ListNode* pNode3 = CreateListNode(3); ListNode* pNode5 = CreateListNode(5); ConnectListNodes(pNode1, pNode3); ConnectListNodes(pNode3, pNode5); ListNode* pNode2 = CreateListNode(1); ListNode* pNode4 = CreateListNode(3); ListNode* pNode6 = CreateListNode(5); ConnectListNodes(pNode2, pNode4); ConnectListNodes(pNode4, pNode6); ListNode* pMergedHead = Test("Test2", pNode1, pNode2); DestroyList(pMergedHead); }
// 链表中只有一个结点,删除头结点 void Test4() { ListNode* pNode1 = CreateListNode(1); Test(pNode1, pNode1); }