给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来
经典题目,代码如下:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 struct ListNode { 5 int m_iData; 6 ListNode* m_pNext; 7 }; 8 ListNode* Reverse(ListNode* in_pListNode) { 9 if(in_pListNode == NULL) { 10 return NULL; 11 }else if(in_pListNode->m_pNext == NULL) { 12 return in_pListNode; 13 } 14 ListNode* t_pFirst = in_pListNode->m_pNext; 15 ListNode* t_pSecond = in_pListNode->m_pNext->m_pNext; 16 in_pListNode->m_pNext = NULL; 17 while(t_pFirst != NULL && t_pSecond != NULL) { 18 t_pFirst->m_pNext = in_pListNode; 19 in_pListNode = t_pFirst; 20 t_pFirst = t_pSecond; 21 t_pSecond = t_pSecond->m_pNext; 22 } 23 t_pFirst->m_pNext = in_pListNode; 24 return t_pFirst; 25 } 26 27 int main() { 28 ListNode* t_iListNode = new ListNode(); 29 ListNode* t_iListNodeHead = t_iListNode; 30 for(int i = 1; i < 10; i ++) { 31 t_iListNode->m_iData = i; 32 ListNode* t_iListNodeNext = new ListNode(); 33 t_iListNode->m_pNext = t_iListNodeNext; 34 t_iListNode = t_iListNodeNext; 35 } 36 t_iListNode->m_iData = 10; 37 ListNode* t_iTempListNode =t_iListNodeHead; 38 cout << "链表翻转前:" ; 39 while(t_iTempListNode != NULL) { 40 cout << t_iTempListNode->m_iData << " "; 41 t_iTempListNode = t_iTempListNode->m_pNext; 42 } 43 cout << endl; 44 45 t_iTempListNode = Reverse(t_iListNodeHead); 46 47 cout << "链表翻转后:" ; 48 while(t_iTempListNode != NULL) { 49 cout << t_iTempListNode->m_iData << " "; 50 t_iTempListNode = t_iTempListNode->m_pNext; 51 } 52 cout << endl; 53 system("pause"); 54 return 0; 55 56 57 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步