首页 > 编程语言 >L2-022 重排链表(25分) c++代码

L2-022 重排链表(25分) c++代码

时间:2024-03-25 12:30:02浏览次数:21  
标签:25 结点 int Ln 链表 start 022 include

给定一个单链表 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地址用−1表示。

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

Address Data Next

其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;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

 代码:

//#include<iostream>
//#include<cstring>
//#include<cmath>
//#include<algorithm>
//#include<ctype.h>
//#include<stdio.h>
//#include<map>
#include<bits/stdc++.h>
using namespace std;

struct node{
	int data;
	int next;
}biao[100005];
int main(){
	int start,n;
	int add;
	vector<int> yuan;
	cin>>start>>n;
	while(n--){
		cin>>add>>biao[add].data>>biao[add].next;
	}
	while(start!=-1){
		yuan.push_back(start);
		start=biao[start].next;
	}
	int l=yuan.size();
	for(int i=0;i<l/2;i++){
		if(i==l/2-1){
			if(l%2==0){
				printf("%05d %d %05d\n",yuan[i+1],biao[yuan[i+1]].data,yuan[i]);
				printf("%05d %d -1\n",yuan[i],biao[yuan[i]].data);
			}
			else{
				printf("%05d %d %05d\n",yuan[l-1-i],biao[yuan[l-1-i]].data,yuan[i]);
				printf("%05d %d %05d\n",yuan[i],biao[yuan[i]].data,yuan[l-2-i]);
				printf("%05d %d -1\n",yuan[i+1],biao[yuan[i+1]].data);
			}
		}
		else{
			printf("%05d %d %05d\n",yuan[l-1-i],biao[yuan[l-1-i]].data,yuan[i]);
			printf("%05d %d %05d\n",yuan[i],biao[yuan[i]].data,yuan[l-2-i]);
		}
	}
	return 0;
}

标签:25,结点,int,Ln,链表,start,022,include
From: https://blog.csdn.net/REIDIO/article/details/136996144

相关文章

  • Oracle-12541无监听或者链接一直未响应
    近日Oracle服务器断电重启后服务挂了,现记录下主要的修复步骤1.检查磁盘空寂是否股够df-h2.服务挂载并启动服务器登录oracle帐号依次输入下列命令:sqlplus /assysdbashutdownimmedicatestartup3.服务启动测试退出linux终端,重新打开登陆sqlplus输入帐号/秘密:system......
  • VS2022使用.Net Framework4.0方法
    从安装了低版本VS的电脑中C:\ProgramFiles(x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\目录下复制.NetFramework4.0等需要的目标包 如果打开项目仍然需要升级目标包的,先升级,加载项目后仍可更改目标包为.NetFramework4.0 。 v4.0ReferenceAss......
  • Sol.P9825
    既然没人来水,我来说一发签到题列出斐波那契额数列,不难发现奇偶性为奇奇偶奇奇偶奇奇偶若想使\(x\timesy\)为偶,则\(x\)或\(y\)中必然有一个偶数。所以不难发现偶数与其后的奇数匹配的情况就是(n%3)*((n%3)+1)+(n/3)*(n%3)+((n/3)-1)*3*(n/3)/2经化简后赛时代码如下(......
  • 单链表删除相同的元素
    #include<iostream>#include<stdlib.h>usingnamespacestd;#defineerror-1#defineok1typedefintStatus;typedefintElemType;typedefstructLNode{ ElemTypedata; LNode*next;}LNode,*LinkList;StatusCreateList(LinkList&L,int......
  • 相交链表:寻找链表的公共节点
    目录一、公共节点二、题目三、思路四、代码五、代码解析1.计算长度2.等长处理3.判断六、注意点1.leetcode的尿性2.仔细观察样例3.经验总结一、公共节点链表不会像两直线相交一样,相交之后再分开。由于单链表只有一个next指针,所以相交之后,会一直相交。二、......
  • Day25 迭代器之Iterator底层
    Day25迭代器之Iterator底层一、迭代器1、概念:迭代器(Iterator)是一种用于遍历集合(Collection)元素的接口,它提供了统一的方式来访问集合中的元素,而不暴露集合的内部结构。通过迭代器,我们可以依次访问集合中的每个元素,进行遍历和操作。2、使用步骤:获取集合的迭代器:Iterat......
  • 代码随想录 第25天 | ● 216.组合总和III ● 17.电话号码的字母组合
    leetcode:216.组合总和III-力扣(LeetCode)classSolution{List<List<Integer>>res=newArrayList<>();LinkedList<Integer>link=newLinkedList<>();publicList<List<Integer>>combinationSum3(i......
  • 链表——增删查改
    题目 题目解析一个很基础的关于链表的增删查改题目,学过数据结构的应该都蛮熟的吧(^^),为了更好的完成题目,我们可以将其变为一个菜单,直接使用。代码增boolPush(ListNode**head,intnum){ ListNode*new_node=newListNode{num,NULL}; if(!new_node) { r......
  • 算法 链表 206.反转链表
    文章目录一.题目二.代码三.总结一.题目题意:反转一个单链表。示例:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL二.代码publicclassReverseList{publicstaticvoidmain(String[]args){ListNode2head=newListNode2(1,newList......
  • 算法 链表 160.链表相交
    文章目录一.题目二.代码三.总结一.题目力扣160:给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。二.代码publicclassLeetCode160{staticclassListNode{intval;L......