https://pintia.cn/problem-sets/994805342720868352/problems/994805425780670464
/ * * 연결된 목록 * 1. 정적으로 정의 링크리스트 구조 배열 * 2 초기화 falg 거짓이다 . * 제 주소 순회를 시작 3. 목록에서 유효한 노드 표시된 유효 접합 참 * 4. 정렬 노드 거짓보다 크 * / #INCLUDE <iostream> 은 USING 스페이스 STD; #INCLUDE <cstdio> #INCLUDE <알고리즘> CONST의 INT의 MAXN = 100010 ; 구조체 노드 { INT에서 , 어드레스, 데이터, 다음 부울 ; falg 노드 [MAXN]} BOOL CMP를 (노드 A, 노드 B) { // 노드의 기능 CMP 타입 불리언 변수 IF (a.falg == false로 || == b.falg 은 false ) { 반환 a.falg> b.falg을; // 把无效结点往后放 } 다른 { 반환 a.data < b.data; } } INT 의 main () { 위해 ( int로 I = 0 ; i가 MAXN를 <; 내가 ++ ) { 노드 [I] .falg = 거짓 ; } INT의 납입은 주소를 시작한다; scanf와 ( " %의 D % d에 " , NUM,이 시작된다); 위한 ( int로 I = 0 내가 ++; 나는 <NUM {) 는 scanf ( " %의 D ", 주소) // 제 1 어드레스 읽기 는 scanf ( " %의 D %의의 D " , 노드 [주소] .DATA, 및 , 기지국 [주소] 다음 내용) 노드 [주소] .Address가 = ; 주소 } int로 카운트 = 0 , = 포인트는 시작, 그동안 (포인트 = -! 1. ) { 노드 [포인트] .falg = true로 , 카운트 ++ ; 포인트 = 노드 [포인트] 다음 내용; } IF (카운트 == 0 ) { // 일본어 문장, 새로운 0-1 링크리스트 출력 노드 아니다 의 printf ( "0-1 ' ); } 다른 { 정렬 (노드, 노드 + MAXN, CMP) 의 printf ( " % D % 05D \ n " , 계산 노드 [ 0 ] .address) 에 대해 ( int로 I = 0 ; I는 < 카운트; 내가 ++ ) { 경우 ! (counts- I = 1 ) { // 结点地址노드 [I], 노드 [I + 1] 의 printf ( " % D % % 05D 05D \ n " , 노드 [I] .address 노드 [I] .DATA 노드 [I + 1 ] .address) } 사람 { 의 printf (" % 05D % D -1 \ n " , 노드 [I] .address 노드 [I] .DATA); } } } 반환 0 ; }