算法题目---反转链表

xiaoxiao2021-02-27  97

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

struct ListNode {     int m_nValue;     ListNode* m_pNext; }; ListNode* ReverseList(ListNode* pHead) {     ListNode* pReversedHead = NULL;     ListNode* pNode = pHead;     ListNode* pPrev = NULL;          while(pNode != NULL)     {         ListNode* pNext = pNode->m_pNext;         if(pNext == NULL)             pReversedHead = pNode;                  pNode->m_pNext = pPrev;                  pPrev = pNode;         pNode = pNext;     }     return pReversedHead; } ListNode* CreateListNode(int value) {     ListNode* pNode = new ListNode();     pNode->m_nValue = value;     pNode->m_pNext = NULL;     return pNode; } void ConnectListNodes(ListNode* pCurrent, ListNode* pNext) {     if(pCurrent == NULL)     {         printf("Error to connect two nodes.\n");     }     pCurrent->m_pNext = pNext; } void PrintListNode(ListNode* pNode) {     if(pNode == NULL)     {         printf("The node is NULL\n");     }     else     {         printf("The key in node is %d.\n", pNode->m_nValue);     } } void PrintList(ListNode* pHead) {     printf("PrintList starts.\n");          ListNode* pNode = pHead;     while(pNode != NULL)     {         printf("%d\t", pNode->m_nValue);         pNode = pNode->m_pNext;     }     printf("\nPrintList ends.\n"); } void DestroyList(ListNode* pHead) {     ListNode* pNode = pHead;     while(pNode != NULL)     {         pHead = pHead->m_pNext;         delete pNode;         pNode = pHead;     } } ListNode* Test(ListNode* pHead) {     printf("The original list is: \n");     PrintList(pHead);     ListNode* pReversedHead = ReverseList(pHead);     printf("The reversed list is: \n");     PrintList(pReversedHead);     return pReversedHead; } 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); } void Test3() {     Test(NULL); } int main() {     Test1();     Test2();     Test3();     return 0; }

转载请注明原文地址: https://www.6miu.com/read-15999.html

最新回复(0)