本文主要是介绍1133. Splitting A Linked List (25)[链表处理],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 原题: https://www.patest.cn/contests/pat-a-practise/1133
2. 思路:
题意:链表处理题
将一杂乱的链表按照一定格式(负的在前,大于给定值的在后)重新排列。
思路:
先把每个结点存储在数组里,
然后遍历3次,存入vector里,最后输出即可。
将一杂乱的链表按照一定格式(负的在前,大于给定值的在后)重新排列。
思路:
先把每个结点存储在数组里,
然后遍历3次,存入vector里,最后输出即可。
已AC
3. 源码
#include <iostream>
#include <vector>using namespace std;
struct Node
{int local;int data;int next;
};
Node dt[100000];int main()
{//freopen("in.txt", "r", stdin);int N, head, K, tmp;vector<Node> re;scanf("%d %d %d", &head, &N, &K);for (int i = 0; i < N; i++){scanf("%d", &tmp);dt[tmp].local = tmp;scanf("%d %d", &dt[tmp].data, &dt[tmp].next);}int adr = head;while (1) //***找出小于0的{if (adr == -1)break;if (dt[adr].data < 0)re.push_back(dt[adr]);adr = dt[adr].next;}adr = head;while (1){if (adr == -1)break;if (dt[adr].data > -1 && dt[adr].data < (K+1))re.push_back(dt[adr]);adr = dt[adr].next;}adr = head;while (1) //***找出大于K的{if (adr == -1)break;if (dt[adr].data > K)re.push_back(dt[adr]);adr = dt[adr].next;}int size = re.size();for (int i = 0; i < size-1; i++){printf("%05d %d %05d\n", re[i].local, re[i].data, re[i+1].local);}printf("%05d %d -1\n", re[size-1].local, re[size-1].data);return 0;
}
这篇关于1133. Splitting A Linked List (25)[链表处理]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!