您的位置:首页 > 编程语言 > C语言/C++

02-线性结构2. Reversing Linked List (25)

2015-05-18 18:30 337 查看
#include <iostream>
#include <string>
#include <vector>
#include <utility>
using namespace std;

struct Record
{
string firstLoca;
int NeedFirst;
string NextLoca;
Record *Next;
};

void free(Record *buff)
{
//if (buff->Next == nullptr)
//	return;
//free(buff->Next);
//delete buff;
Record *Temp = buff->Next;
while (Temp)
{
delete buff;
buff = Temp;
Temp = Temp->Next;
}
}

void MyRevese(Record* &ptrFirst, Record* &ptrLast)
{
if (ptrFirst == nullptr)
return;

Record* rd = ptrLast->Next;
Record* p = ptrFirst->Next;
Record* p1 = ptrFirst;
while (p != rd)
{
Record* Temp = p->Next;
p->Next = p1;
p1 = p;
p = Temp;
}
ptrFirst->Next = p;
swap(ptrFirst, ptrLast);
}

int main()
{
string first;
int nSize;
int NeedFirst;
cin >> first >> nSize >> NeedFirst;
vector<Record> vec(nSize);

for (int i = 0; i < nSize; ++i)
{
string strTemp;
int loca;
cin >> strTemp;
cin >> loca;
vec[loca - 1].NeedFirst = loca;
vec[loca - 1].firstLoca = strTemp;
vec[loca - 1].Next = nullptr;
cin >> strTemp;
vec[loca - 1].NextLoca = strTemp;
}

Record *headptr = new Record({ vec[0].firstLoca, vec[0].NeedFirst, vec[0].NextLoca, vec[0].Next });

Record *lastptr = headptr;
for (auto begin = vec.begin() + 1; begin != vec.end(); ++begin)
{
lastptr->Next = new Record({ begin->firstLoca, begin->NeedFirst, begin->NextLoca, begin->Next });
lastptr = lastptr->Next;
}
Record *Test = headptr;
while (--NeedFirst > 0)
Test = Test->Next;

MyRevese(headptr, Test);

Test = headptr;
while (nSize-- > 0)
{
cout << Test->firstLoca << " " << Test->NeedFirst << " " << Test->NextLoca << endl;
Test = Test->Next;
}

free(headptr);
return 0;
}
在vs2013上运行的好好的,可是不知道为什么在pat上说段错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息