Reversing Linked List

一、题目

给定一个链表L和一个整数K,对链表内的元素以K为基本长度进行翻转。

详细信息可看链接:hhttps://pintia.cn/problem-sets/1340842164139356160/problems/1368396163593801730

二、解法

    整了大半天,回头一看,题目意思理解错了.....................
首先把链表的顺序存储起来,然后以K个单位循环翻转链表,翻转一次后,如果链表后面的
元素仍大于K,继续翻转,就是在这坑了。后续不足K个的补到最后,以-1表示链表的结束。
first = list(input().split())
found = []
dict={}
for i in range(int(first[1])):
    found.append(list(input().split()))
linkBuild = []
out = []
index = first[0]
while len(found):
	# 对链表进行顺序连接
    for i in found:
        if i[0] == index:
            linkBuild.append(i[0])
            dict[i[0]]=i[1]
            index = i[2]
            found.remove(i)
            break
     # 如果足够K个元素,进行翻转
    if len(linkBuild) == int(first[2]) :
        linkBuild.reverse()
        for i in range(len(linkBuild)):
            out.append(linkBuild[i])
        linkBuild.clear()
    if index == -1:
        break
# 不足K个元素的,填补到输出结果后面
for i in range(0, len(linkBuild)):
    out.append(linkBuild[i])
# 按照输出规则进行输出,最后以-1表示链表的结束。
for i in range(0, len(out) - 1):
    print(out[i], dict[out[i]], out[i + 1])
print(out[-1], dict[out[-1]], -1)

在这里插入图片描述
后面两个测试点运行超时,无法通过。

参考别人的C++题解:
链接:https://blog.csdn.net/qq_40991687/article/details/104085351

#include<iostream>
#include<algorithm>  // 包含reverse函数
using namespace std;
int main() {
	int st,n,m;
	cin>>st>>n>>m;
	//存储输入的不规则链表
	int data[100000],next[100000],list[100000];
	for(int i=0; i<n; ++i) {
		int temp;
		cin>>temp;
		cin>>data[temp]>>next[temp];
	}
	int count=0;//坑。不是所有的数据都有效
	// 对链表进行排序
	while(st!=-1) {
		list[count++]=st;
		st=next[st];
	}
	//以m个元素为单位翻转链表
	for(int i=0; i<count-count%m; i+=m)
		reverse(list+i,list+i+m);
	//输出
	for(int i=0; i<count-1; ++i)
		printf("%05d %d %05d\n",list[i],data[list[i]],list[i+1]);
	printf("%05d %d -1",list[count-1],data[list[count-1]]);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值