反转链表
来源:互联网 发布:mac safari缓存文件 编辑:程序博客网 时间:2024/06/06 17:43
问题:定义一个函数,输入一个链表的头结点,反转该链表并且输出反转后链表的头结点,链表的定义如下:
struct ListNode
{
int m_nKey;
ListNode *m_pNext;
};
详细的实现代码如下:
#include "stdafx.h"#include "..\Utilities\List.h"//反转链表,并且返回反转后链表的头结点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* 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 _tmain(int argc, _TCHAR* argv[]){ Test1(); Test2(); Test3(); return 0;}
运行结果如下:
0 0
- 链表反转
- 反转链表
- 单向链表反转
- 链表反转:
- 链表的反转
- 链表反转
- 反转单向链表
- 链表反转
- 单向链表反转
- 单向链表反转
- 链表的反转
- 链表反转
- 反转链表
- 链表反转
- 链表反转
- 链表反转
- 链表反转
- 链表的反转
- DroidPlugin代码分析(二) Hook机制
- 用/proc/stat计算cpu的占用率
- Codeforces 739C.Alyona and towers (线段树/非递归线段树)
- VSCode快捷键设置
- javascript事件——event对象
- 反转链表
- HTTPS原理
- Android 反编译初探 应用是如何被注入广告的
- iOS 相机工具类
- Java之--Stack栈
- 教你手机号码批量查询归属地的方法
- 算法练习2:Two fighters, one winner.
- 引入其他字体库 和 字体样式设置
- jQuery的图片轮播插件PgwSlideshow使用详解