일정한 주어 K 및 단일 연결리스트 L을 경우마다의 링크 역방향 해야하는 에 K 소자 예를 들어 L.를 부여 되는 L 1 → 2 → 6 → 3 → 4 → 5, 만약 K = 3, 그럼 출력해야 3 → 2 → 1 → 6 → 5 → 4; 경우 K는 = 4, 당신이해야 출력 4 → 3 → 2 → 1 → 5 → 6.
입력 사양 :
각 입력 파일은 하나의 테스트 케이스가 포함되어 있습니다. 각 경우에있어서, 첫 번째 행의 첫 번째 노드의 주소를 포함하고, 긍정적 인 N ( 전체 노드의 개수 ≤) 및 포지티브 K ( 하위리스트의 길이 ≤) 반전된다. 노드의 어드레스가 5 자리 부가 아닌 정수이고, NULL은 -1로 표시된다.
이어서 N 라인을 따라 각각의 형식의 노드를 설명
Address Data Next
여기서 Address
노드의 위치이며, Data
는 정수이며, Next
다음 노드의 위치이다.
출력 사양 :
각각의 경우를 들어, 출력 결과 목록을 연결 명령했다. 각 노드는 행을 점유하고, 입력과 동일한 형식으로 출력된다.
샘플 입력 :
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
샘플 출력 :
00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
맙소사! 목록 쓰기 일일
![](https://img2020.cnblogs.com/i-beta/1548631/202003/1548631-20200311224324495-696098270.jpg)
#INCLUDE <iostream> #INCLUDE <STDIO.H> 은 USING 스페이스 STD 단계; 구조체 노드 { int로 상기 민 INT 다음 단계; // 다음 어드레스 }리스트 [ 100001 ]; // 10 초와 같은 어드레스 공간 인쇄 ( INT N-) { IF (N - == - . 1 ) { COUT << - 1. , 창 ; } INT T = 10000 ; 그동안 (T) { COUT << N- / T; N% N = t; t = t / 10 ; } } INT 의 main () { INT 전나무, N, K; scanf와 ( " % D % D % D " , 전나무, N, K); // CIN 전나무 >> >> N >> K; 리스트 [ 100000 ] 다음 내용 = 전나무; 위한 ( INT 난 = 0 ; I <N; ++ I) { INT의 T1, t, T2; // CIN >> >> t >> T1, T2; scanf와 ( " % D % D % D ' , T1, t, T2); 목록 [T1]. 리스트 [T1] 다음 내용 = T2; } INT의 P1 =리스트 [전나무] 다음 내용, P2 =리스트 [전나무] 다음 내용, P3 = 전나무, P4 = 100000 ; 하지만 ( 1 ) { // COUT << 'P4 ='<< P4 << "P3 ="<< P3 << "P2 ="<< P2 << "P1 ="<< P1 << ENDL; INT 플래그 = 1 ; 위한 ( INT 난 = 1 ; I <K 단계; I ++ ) { 경우 (P1 =! - 1 ) { P1 = 리스트 [P1] 다음 내용; 리스트 [P2] 다음 내용 = P3;=P2; P2 = P1; } 다른 { 플래그 = 0 ; 휴식 ; } // COUT << "aaP4 ="<< P4 << "P3 ="<< P3 << "P2 ="<< P2 << "P1 ="<< P1 << ENDL; } 경우 (플래그) { INT의 Y = 리스트 [P4] 다음 내용; 리스트 [P4] 다음 내용 = P3; P3 = Y; // COUT << "P3 ="<< P3 << ENDL; // 대 (INT J = 1; J <K; ++ J) = P3리스트 [P3] 다음 내용; 리스트 [P3] 다음 내용 =PL; // 복원 P4 = P3, P3 = P2; IF (P2 == - 1. ) BREAK ; // 그냥 종료 PL = 리스트 [PL] 다음 내용] P2 = 리스트 [P2] 다음 내용; // COUT << "P4 ="<< << P4 'P3 = "P3 << <<"P2 = "P2 << <<"경기 수 = "<< ENDL << PL이 } 다른 // 단부 꼬리 움츠림 동작 (갖는다 디버그 : 다단계 위로하는 아 아) { while 회 ! (= P3 리스트 [P4] 다음 내용)! // { // 경기 수 = P2; P2 = P3; P3 = 리스트 [P3] 다음 내용; 리스트 [P2] 다음 내용 = P1; P1 = P2; } 휴식 ; } } // COUT << ENDL; INT P는 = 100000 ; 하지만 ( 1 ) { P = 리스트 [P] 다음 내용; (P) 인쇄; COUT << " " <<리스트 [P] .Num << " " ; 인쇄 (리스트 [P] 다음 내용); COUT << ENDL; 만약(리스트 [P] 다음 내용 == - 1 ) 체류 ; } 반환 0 ; }