// 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点。 #include <iostream> #include "List.h" ListNode* ReverseList(ListNode* pHead) { ListNode* pReversedHead = nullptr;//设置三个节点变量,第一是已经被反转的头节点(原链表尾节点) ListNode* pNode = pHead;//第二个是当前节点 ListNode* pPrev = nullptr;//第三是原链表中当前节点的前一个节点 while (pNode != nullptr) { ListNode* pNext = pNode->m_pNext;//pNext是原链表中当前节点的后一个节点 if (pNext == nullptr) pReversedHead = pNode; pNode->m_pNext = pPrev; pPrev = pNode; pNode = pNext; } return pReversedHead; } // ====================测试代码==================== 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(nullptr); } int main(int argc, char* argv[]) { Test1(); Test2(); Test3(); system("pause"); return 0; }
原文地址:https://www.cnblogs.com/CJT-blog/p/10489103.html
时间: 2024-10-13 00:58:18