L2-2 重排链表 (25 分)

给定一个单链表 L?1??→L?2??→?→L?n−1??→L?n??,请编写程序将链表重新排列为 L?n??→L?1??→L?n−1??→L?2??→?。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。

输入格式:

每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤)。结点的地址是5位非负整数,NULL地址用−表示。

接下来有N行,每行格式为:

Address Data Next

其中Address是结点地址;Data是该结点保存的数据,为不超过1的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。

输出格式:

对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。

输入样例:

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

输出样例:

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

不知道string的前导零怎么加上。。。还在思考。。。有大佬会吗
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<map>
 5 #include<algorithm>
 6 #include <iostream>
 7 #include <iomanip>
 8 using namespace std;
 9 typedef long long ll;
10 const int amn=1e5+5;
11
12 struct book
13 {
14     int data;
15     string add,next;
16 } a[amn],b[amn];
17
18 map<string,int> cnt;
19
20 int main()
21 {
22     int n;char badd[10];
23     cin>>badd>>n;
24     for(int i=1; i<=n; i++)
25     {
26         cin>>a[i].add>>a[i].data>>a[i].next;
27         cnt[a[i].add]=i;
28     }
29     int top=1;
30 //    cout<<a[cnt[badd]].add;
31     b[1].add=a[cnt[badd]].add;
32     b[1].data=a[cnt[badd]].data;
33     b[1].next=a[cnt[badd]].next;
34     for(int i=1; i<n; i++)
35     {
36         if(cnt[b[top-1].next]==-1)continue;
37         b[++top].add=a[cnt[b[top-1].next]].add;
38         b[top].data=a[cnt[b[top-1].next]].data;
39         b[top].next=a[cnt[b[top-1].next]].next;
40     }
41     //for(int i=1;i<=top;i++)cout<<b[i].data<<" ";
42     for(int i=top,j=1;i>=j;i--,j++)
43     {
44         cout<<b[i].add<<" "<<b[i].data<<" "<<b[j].add<<endl;
45         //i--,j++
46         cout<<b[j].add<<" "<<b[j].data<<" "<<b[i-1].add<<endl;
47     }
48 }

原文地址:https://www.cnblogs.com/brainm/p/10603411.html

时间: 2024-11-07 20:58:19

L2-2 重排链表 (25 分)的相关文章

基础实验3-2.3 共享后缀的链表 (25分)

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上.为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀.下图给出了单词“loading”和“being”的存储形式.本题要求你找出两个链表的公共后缀. 函数接口定义: PtrToNode Suffix( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */

PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

1052 Linked List Sorting (25 分) A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, y

99. 重排链表

99. 重排链表 难度系数 中等 通过率 24% 描述 笔记 数据 评测 给定一个单链表L: L0→L1→-→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→- 必须在不改变节点值的情况下进行原地操作. 您在真实的面试中是否遇到过这个题? Yes 样例 给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null /** * Definition of ListNode * class ListNode

GPLT天梯赛 L2-022. 重排链表

L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L2→....例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (<= 105).结点的地址是5位非负整数,NULL地址用-

Leetcode 143.重排链表

重排链表 给定一个单链表 L:L0→L1→-→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例 1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3. 示例 2: 给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3. 1 public class Solution{ 2

1133 Splitting A Linked List (25 分)

1133 Splitting A Linked List (25 分) Given a singly linked list, you are supposed to rearrange its elements so that all the negative values appear before all of the non-negatives, and all the values in [0, K] appear before all those greater than K. Th

【PAT甲级】1032 Sharing (25分)

1032 Sharing (25分) To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, loading and being are stored a

【PAT甲级】1052 Linked List Sorting (25分)

1052 Linked List Sorting (25分) A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, yo

PAT1075-----链表元素分类 (25分)

1075 链表元素分类 (25分) 输入样例: 00100 9 10 23333 10 27777 00000 0 99999 00100 18 12309 68237 -6 23333 33218 -4 00000 48652 -2 -1 99999 5 68237 27777 11 48652 12309 7 33218 输出样例: 33218 -4 68237 68237 -6 48652 48652 -2 12309 12309 7 00000 00000 0 99999 99999 5

4-9 二叉树的遍历 (25分)

4-9 二叉树的遍历   (25分) 输出样例(对于图中给出的树): Inorder: D B E F A G H C I Preorder: A B D F E C G H I Postorder: D E F B H G I C A Levelorder: A B C D F G I E H 代码:(都是遍历的算法) 1 // 4-9 二叉树的遍历 2 // 3 // Created by Haoyu Guo on 04/02/2017. 4 // Copyright ? 2017 Haoy