您的位置:首页 > 其它

1074. Reversing Linked List (25)

2015-11-24 20:10 369 查看
1.该题与leetcode中的Reverse Linked List 和Reverse Linked List II相似

2.这次解法并没有采用链表操作,而是把链表转化为数组,对数组进行操作



AC代码如下:

//#include<string>
//#include <iomanip>
//#include<stack>
//#include<unordered_set>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<unordered_map>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include <algorithm>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
#include<stack>
using namespace std;
/*
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 3
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 2
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 0
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 1
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 5
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

00100 6 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
*/
struct ListNode{
int val;
int add;
ListNode*next;
ListNode(int x) :val(x), next(NULL){};
ListNode() :val(0), next(NULL){};
};
int main(void)
{
vector<ListNode> list(100001,ListNode(-1));
int head, recordSum, step;
cin >> head >> recordSum >> step;
for (int i = 0; i < recordSum; i++)
{
int now, val, next;
scanf("%d %d %d", &now, &val, &next);
list[now].val = val;
list[now].add = now;
if (next != -1)
{
list[now].next = &list[next];
list[next].add = next;
}
}
vector<int> num(100001, -1);//记录地址,地址是唯一的
int idx=0;
ListNode* root = &list[head];
while (root)
{
num[idx++] = root->add;
root = root->next;
}

if (step!=0)//等于0时,会进入死循环
for (int i = 0; i+step <=idx; i+=step)
{
for (int j = 0; j < step / 2; j++)
{
swap(num[j+i], num[step + i - 1 - j]);
}
}
for (int i = 0; i < idx; i++)
{
if (i != idx - 1)
printf("%05d %d %05d\n", num[i], list[num[i]].val, num[i + 1]);
else
printf("%05d %d -1\n", num[i], list[num[i]].val);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: