02-线性结构2 Reversing Linked List
由于最近学的是线性结构,且因数组需开辟的空间太大。因此这里用的是纯链表实现的这个链表翻转。
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N(<= 10^5) which is the total number of nodes, and a positive K(<= N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then NN lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is an integer, and Nextis the position of the next node.
Output Specification:
For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include <stdio.h>
#include <stdlib.h> typedef struct Node
{
int address;
int data;
int nextAddress;
struct Node *next;
}Node;
typedef struct Node *LinkList; int main()
{
//排序前
LinkList L1, p1, q1;
L1 = (LinkList)malloc(sizeof(Node)); //创建头指针
L1->next = NULL;
int firstAddress;
int N, K;//N为总结点数 K为需翻转的数
scanf("%d %d %d", &firstAddress, &N, &K);
p1 = L1;
for(int i = ; i < N; i++) {
q1 = (LinkList)malloc(sizeof(Node));
scanf("%d %d %d",&q1->address, &q1->data, &q1->nextAddress);
p1->next = q1;
p1 = q1;
}
p1->next = NULL; // //测试没问题
// printf("测试1 :\n");
// p1 = L1->next;
// while(p1){
// printf("%05d %d %d\n", p1->address, p1->data, p1->nextAddress);
// p1 = p1->next;
// } //排序后
LinkList L2, p2;
L2 = (LinkList)malloc(sizeof(Node)); //创建头指针
L2->next = NULL;
int count = ;
int findAddress = firstAddress;
p2 = L2;
while(findAddress != -) { //while(count < N) {有多余结点不在链表上没通过 q1 = L1;
while(q1->next) {
if(q1->next->address == findAddress) {
p2->next = q1->next;
q1->next = q1->next->next;
p2 = p2->next;
count++;
// printf("count = %d\n",count);
findAddress = p2->nextAddress;
// printf("findAddress = %d\n",findAddress);
}else {
q1 = q1->next;
}
}
}
p2->next = NULL; // //测试没问题
// printf("测试2 :\n");
// p2 = L2->next;
// while(p2){
// printf("%05d %d %05d\n", p2->address, p2->data, p2->nextAddress);
// p2 = p2->next;
// }
//Reversing
LinkList L3, p3, q3, tail;
L3 = (LinkList)malloc(sizeof(Node)); //创建头指针
L3->next = NULL;
//将L2以头插法插入L3
int n = count; //防止有多余结点影响 n=N 会影响
int k = K;
p3 = L3;
p2 = L2;
while(n >= k) {
n -= k;
for(int i = ; i < k; i++) {
p3->next = p2->next;
p2->next = p2->next->next;
if(i == )
tail = p3->next;
else
p3->next->next = q3;
q3 = p3->next;
}
p3 = tail;
}
p3->next = L2->next; p3 = L3->next;
while(p3->next) {
printf("%05d %d %05d\n",p3->address, p3->data, p3->next->address);//不到五位数用0补全
p3 = p3->next;
}
printf("%05d %d -1\n",p3->address, p3->data);
return ;
}
----------------------------------------陈越老师讲解----------------------------------

单链表逆转模板代码
LinkList Reverse (LinkList head, int K) //单链表逆转K个结点 且仅一次
{
int cnt = ; //用于计数已逆转的结点数
LinkList new_ = head->next;
LinkList old = new_->next;
LinkList tmp;
while(cnt < K) {
tmp = old->next; //用于old结点逆转后 记录未逆转链表的头结点
old->next = new_; //逆转
new_ = old; //向后移位
old = tmp; //向后移位
cnt++; //逆转节点+1
}
head->next->next = old;
return new_; //新的头结点
}
02-线性结构2 Reversing Linked List的更多相关文章
- pat02-线性结构1. Reversing Linked List (25)
02-线性结构1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, ...
- 02-线性结构3 Reversing Linked List(25 point(s)) 【链表】
02-线性结构3 Reversing Linked List(25 point(s)) Given a constant K and a singly linked list L, you are s ...
- 02-线性结构3 Reversing Linked List
02-线性结构3 Reversing Linked List (25分) 时间限制:400ms 内存限制:64MB 代码长度限制:16kB 判题程序:系统默认 作者:陈越 单位:浙江大学 http ...
- PTA 02-线性结构3 Reversing Linked List (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/664 5-2 Reversing Linked List (25分) Given a ...
- 数据结构练习 02-线性结构2. Reversing Linked List (25)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- 02-线性结构3 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- 02-线性结构3 Reversing Linked List (25 分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...
- 02-线性结构3 Reversing Linked List
题目 Sample Input: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 ...
- PAT02-线性结构3 Reversing Linked List
题目:https://pintia.cn/problem-sets/1010070491934568448/problems/1037889290772254722 先是看了牛客(https://ww ...
随机推荐
- 监控RAC中的临时表空间
it is from metalink:Note:465840.1 1>Monitor the temp space allocation to make sure each instance ...
- RDD缓存策略
Spark支持将数据集放置在集群的缓存中,以便于数据重用. Spark缓存策略对应的类: class StorageLevel private( private var useDisk_ : Bool ...
- fill的用法
for(int i=0;i<=10;i++) num[i]=i ; fill(num+1,num+1+5,2) ; for(int i=0;i<=10;i++) printf(" ...
- U盘无法拷贝超过4G的大文件
现在U盘的容量越来越大了,8G闪存满天飞,几乎已成“标配”,市面上再见难觅64M.128M等U盘的踪迹,可是细心的你也许已经发现,即使是8G或更大体积的U盘,仍然不能拷贝存储体积超过4G的大文件,这是 ...
- 在代码中调用 mvc 4 api
mvc 4 api 的调用有很多种,最常见也最简单的一种是 用 ajax 的方式在前端界面中调用, 如果是在后台代码中调用 ,是要复杂一些,以下是 以 post 的方式调用 api 的封装好的方法: ...
- CentOS6.5 ssh远程连接缓慢解决方法
UseDNS no GSSAPIAuthentication no 1.适用命令及方案如下:[远程连接及执行命令]ssh -p22 root@10.0.0.19ssh -p22 root@10.0.0 ...
- python3.5在print和input上的几个变化
1. 在python3.5中使用print,打印内容必须用括号()括起来.python2.7中可以不用括号,如果你加了括号,代码在python2.7中也是可以正常运行的. python3.5 exam ...
- CSS 之 Opacity多浏览器透明度兼容处理
用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...
- 前端开发中的SEO
什么是SEO SEO由英文Search Engine Optimization缩写而来,中文意译为"搜索引擎优化".SEO是指从自然搜索结果获得网站流量的技术和过程,是在了解搜索引 ...
- EnCase v7 could not recognize Chinese character folder names / file names on Linux Platform
Last week my friend brought me an evidence file duplicated from a Linux server, which distribution i ...