您的位置:首页 > 其它

链表的部分翻转

2016-04-28 22:17 363 查看
链表相加:

给定一个链表,翻转该链表从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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: