链表的部分翻转
2016-04-28 22:17
363 查看
链表相加:
给定一个链表,翻转该链表从m到n的位置。要求直接翻转而非申请新空间。
如:给定:1->2->3->4->5,m=2,n = 4.
返回:1->4->3->2->5.
程序实现:
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
给定一个链表,翻转该链表从m到n的位置。要求直接翻转而非申请新空间。
如:给定:1->2->3->4->5,m=2,n = 4.
返回:1->4->3->2->5.
程序实现:
/************************************ File Name:ListPartReverse.cpp Author: godfrey Created Time: 2016/04/28 *************************************/ #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef struct tagSNode{ int value; tagSNode* pNext; tagSNode(int v):value(v),pNext(NULL) {} }SNode; //打印链表 void Print(SNode* pHead){ SNode* p = pHead->pNext; while(p){ cout<<p->value<<" "; p = p->pNext; } cout<<endl; } //删除分配结点空间 void Destroy(SNode* pHead){ SNode* p; while(pHead){ p = pHead->pNext; delete pHead; pHead = p; } } //链表部分翻转 void ListPartReverse(SNode* pHead,int from,int to){ SNode* pCur = pHead->pNext; int i; for(i=0;i<from-1;i++){ pHead = pCur; pCur = pCur->pNext; } SNode* pPre = pCur; pCur = pCur->pNext; SNode* t = NULL; for(;i<to-1;i++){ t = pCur->pNext; pCur->pNext = pHead->pNext; pHead->pNext = pCur; pPre->pNext = t; pCur = t; } } int main() { SNode* pHead = new SNode(0); for(int i=0;i<10;i++){ SNode* p = new SNode(rand()%100); p->pNext = pHead->pNext; pHead->pNext = p; } Print(pHead); ListPartReverse(pHead,4,8); Print(pHead); Destroy(pHead); return 0; }
运行结果:
转载请注明出处:http://www.cnblogs.com/gaobaoru-articles/
相关文章推荐
- 练习题
- 基于.NET平台常用的框架整理【转】
- 简述epoll并发网络编程方法
- 自己创造的一个APP架构,只用一个Activity
- 软考高项学员:2016年4月13日作业
- ZOJ3460 Missile 二分图(拆点)+二分
- 网络通信原理和socke通信原理
- 运行VS2010出现无效的许可证数据
- maven 学习---Maven 构建配置文件
- StringUtil方法全集
- Tomcat内存设置详解
- Problem F
- 利用分类(category)扩充UIImage,实现按钮点击改变背景颜色
- php+nginx 上传大文件要修改的配置
- RBM中的Pseudo-likelihood的理解
- 学习笔记之 curl 命令用法详解
- 魅族版本对应内核
- 初次接触jQuery ---随手记
- POJ-3468-A Simple Problem with Integers
- 集合框架(数据结构之数组和链表)