【c语言】L2-022 重排链表 (25分)附带Java解法思路

题目

Java代码

一开始先用Java写,但最后一个测试点运行超时
参照思路


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Vector;

public class Main {
    
    

	public static void main(String[] args) throws IOException {
    
    
		// TODO Auto-generated method stub
     //Scanner in = new Scanner(System.in);
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String[] len1 = in.readLine().split(" ");
   // int start = in.nextInt();
   // int n = in.nextInt();
		int start = Integer.parseInt(len1[0]);
		int n = Integer.parseInt(len1[1]);
    Node[] node = new Node[100001];
    int a,b,c;
     for(int i=0;i<n;i++) {
    
    
    	 String[] len2 = in.readLine().split(" ");
           a = Integer.parseInt(len2[0]);
           b = Integer.parseInt(len2[1]);
           c = Integer.parseInt(len2[2]);
           node[a] = new Node(b,c);
    	 //node[in.nextInt()] = new Node(in.nextInt(),in.nextInt());
     }
 //创建一个向量类的对象,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。
     Vector<Integer> list = new Vector<Integer>();
     for(;node[start].next!=-1;start=node[start].next) {
    
    
    	 list.add(start);
     }
     list.add(start);//存入最后一个next,-1
     int i=0;
     int j=list.size()-1;
     while(i<=j) {
    
    //前后同时遍历
    	 if(j==list.size()-1) {
    
    
    		 //%5d:输出的整型宽度至少为5位
    		 System.out.print(String.format("%05d",list.get(j))+" "+node[list.get(j)].date+" ");
    		 j--;
    	 }
    	 else {
    
    
    		 System.out.println(String.format("%05d",list.get(j)));
    		 System.out.print(String.format("%05d",list.get(j))+" "+node[list.get(j)].date+" ");
    		 j--;
    	 }
    	 if(i<=j) {
    
    
    		 System.out.println(String.format("%05d",list.get(i)));
    		 System.out.print(String.format("%05d",list.get(i))+" "+node[list.get(i)].date+" ");
    		 i++;
    	 }
    	 if(i>j) {
    
    
    		 System.out.println("-1");
    	 }
     }
	}
}

class Node{
    
    
	public int date;
	public int next;
	public Node(int date,int next) {
    
    
		this.date = date;
		this.next = next;
	}
}

C代码

还没学c++就先用c吧,c可以全部通过
参考

#include<stdio.h>
#include<string.h>
struct Node{
    
    
	int pre,data,next;
}node[100001];
int main(){
    
    
	int i,j,start,end,n,a,b,c;
	scanf("%d%d",&start,&n);
	for(i=0;i<n;i++){
    
    
		scanf("%d%d%d",&a,&b,&c);		
		node[a].data = b;
		node[a].next = c; 
		if(c!=-1)
		node[c].pre = a;//保存下一个结点的前一个结点地址 
		else
		end = a;//保存最后一个结点地址 
		
    }
         for(;;)
      {
    
    
        printf("%05d %d ",end,node[end].data);
        if(end==start)
        {
    
    
            printf("-1\n");
            break;
        }
        else{
    
    
           printf("%05d\n",start); 	
        }
        printf("%05d %d ",start,node[start].data);
        
        end = node[end].pre;
        if(start==end)
        {
    
    
            printf("-1\n");
            break;
        }
        else{
    
    
        	printf("%05d\n",end);
        }
        start=node[start].next;
    }
	return 0; 
}

补充

c里面用到了%05d的知识点补充

猜你喜欢

转载自blog.csdn.net/weixin_45867159/article/details/108943803