不开辟新空间反转单链表(递归版本)
来源:互联网 发布:国外创意广告视频 知乎 编辑:程序博客网 时间:2024/06/06 17:23
写的还是很坑的,今天状态奇差
ListNode* ReverseList(ListNode* pHead, ListNode*& pNewHead ){if ( NULL == pHead )return NULL;ListNode* pPrev = NULL;if ( NULL != pHead->m_pNext )pPrev = ReverseList( pHead->m_pNext, pNewHead );else//注意得保存下新的头pNewHead = pHead;if ( NULL != pPrev )//注意递归第一次,pPrev为NULL,所以得加条件判断pPrev->m_pNext = pHead;return pHead;}
#include <iostream>using namespace std;struct ListNode{int m_nKey;ListNode* m_pNext;ListNode( ListNode* pNext, int value ): m_pNext( pNext ), m_nKey( value ){}};void push_back( ListNode** pHead, int value );ListNode* Find( ListNode* pListHead, int value );ListNode* ReverseList(ListNode* pHead, ListNode*& pNewHead );int main( ){ListNode* pHead = NULL;//push_back( &pHead, 1 );/*push_back( &pHead, 1 );push_back( &pHead, 2 );*///push_back( &pHead, 1 );//push_back( &pHead, 2 );//push_back( &pHead, 3 );//push_back( &pHead, 4 );ListNode* pNewHead = NULL;ReverseList( pHead, pNewHead );if ( NULL != pHead )//坑1pHead->m_pNext = NULL;while ( NULL != pNewHead ){//坑2.小心别 NULL != pNewHead 这样会遗漏最后一个结点cout << pNewHead->m_nKey << " ";pNewHead = pNewHead->m_pNext;}cout << endl;return 0;}void push_back( ListNode** pHead, int value ){if ( NULL == pHead )return;ListNode* pNewNode = new ListNode( NULL, value );if ( NULL == *pHead ){*pHead = pNewNode;return;}ListNode* pNode = *pHead;while ( NULL != pNode->m_pNext )pNode = pNode->m_pNext;pNode->m_pNext = pNewNode;}ListNode* Find( ListNode* pListHead, int value ){if ( NULL == pListHead )return NULL;ListNode* pNode = pListHead;while ( NULL != pNode && value != pNode->m_nKey )pNode = pNode->m_pNext;if ( NULL == pNode )return NULL;return pNode;}ListNode* ReverseList(ListNode* pHead, ListNode*& pNewHead ){if ( NULL == pHead )return NULL;ListNode* pPrev = NULL;if ( NULL != pHead->m_pNext )pPrev = ReverseList( pHead->m_pNext, pNewHead );else//注意得保存下新的头pNewHead = pHead;if ( NULL != pPrev )//注意递归第一次,pPrev为NULL,所以得加条件判断pPrev->m_pNext = pHead;return pHead;}
阅读全文
1 0
- 不开辟新空间反转单链表(递归版本)
- 链表反转不开辟新空间
- 合并两个排序的链表使之依然有序(不开辟新空间在原链表上操作的非递归版本)
- 合并两个有序的链表使新链表依然有序(不开辟新空间,在原链表上操作。 递归版本)
- 反转链表(在原链表进行操作,不开辟新空间. O(N)
- 不开辟新空间,两个有序单链表合并为一个有序单链表
- N*N矩阵的旋转 不开辟新空间
- 不申请新的空间,字符串反转
- 我来开辟新空间!
- opencv图像原地(不开辟新空间)顺时旋转90度
- 图像翻正以及原地(不开辟新空间)顺时旋转90度问题
- java n*n的二维数组转置,不开辟新的空间
- 字符串替换(新开辟空间)
- 大数相加(不开辟额外空间)
- 单链表的反转(非递归与递归版本)
- 批量将图像原地(不开辟新空间)顺时旋转90度保存以及灰度化
- 每日编程6之单链表反转递归版本
- 15、合并两个有序数组,不另外开辟空间 JAVA
- POJ 1143Number Game
- Python set
- 基于WR703N路由器的WIFI机器人
- java多线程与线程同步
- 子弹朝向屏幕准星发射
- 不开辟新空间反转单链表(递归版本)
- 细节补充知识
- Python 函数
- QStringList的简单用法
- 剑指offer--栈的压入、弹出序列
- 分工明确,知人善用
- Python 切片
- 编码的故事
- Makefile通用版本