문제의 의미는 : , 목록이 제공 패리티 응집에 따른 목록 엘리먼트 짝수 뒤에 위치 노드 앞의 노드 홀수 위치.
입력 : 2-> 1-> 3-> 5-> 6> 3-> 7-> NULL 출력 : 2-> 3-> 6> 7-> 1-> 5-> 4-> NULL
분석 :
: 하나의 행동 재귀.
(1) 제 재귀 oddEvenList (헤드 -> 다음 -> 다음)이 케이스 (2)에있어서,리스트 -> (1) -> (같이 Recurse 결과 : 3-> 6> 7-> 5-> 4)
(2) 2 (짝수 비트 위치 제 재귀 결과) 5 (1)의 전방에 삽입되는, (3)의 앞의 (제 1 위치의 홀수 비트 같이 Recurse 결과)에 삽입
이 방법의 단점은,이 시간 복잡도 긍정 O (N)를 통해 각각의 순환 체인 길이를 필요로하고, 권장되지 않는다
/ ** * 단독으로 링크 된 목록에 대한 정의. * 구조체 {ListNode * INT의 발; * ListNode * 다음; * ListNode INT (X) : 발 (x)는, 다음 (NULL) {} *}; * / 클래스 솔루션 { 공개 : ListNode * oddEvenList (ListNode * 헤드) { 경우 (머리 == NULL || 머리 -> 다음 == NULL || 머리 -> 다음 -> 다음 == NULL) 반환 헤드; ListNode * TMP = 머리; INT LEN = 0; 동안 (TMP) { TMP = TMP -> 다음; ++ 렌; } ListNode * suf1 = 헤드 -> 다음; ListNode * suf2 = oddEvenList (헤드 -> 다음 -> 다음); 머리 -> 다음 = suf2; 경우 (LEN % 2 == 0) { LEN = LEN (- 2) / 2 - 1; } 다른 { LEN = LEN (- 2) / 2; } TMP = suf2; 동안 (렌 -) { TMP = TMP -> 다음; } suf1 -> 다음 = TMP -> 다음; TMP -> 다음 = suf1; 머리를 반환; } };
방법 2 : 홀수 비트 홀수 비트는 짝수 비트에도 짝수 비트 후 처음과 체인의 끝이 홀수 비트에서 비트.
/ ** * 단독으로 링크 된 목록에 대한 정의. * 구조체 {ListNode * INT의 발; * ListNode * 다음; * ListNode INT (X) : 발 (x)는, 다음 (NULL) {} *}; * / 클래스 솔루션 { 공개 : ListNode * oddEvenList (ListNode * 헤드) { 경우 (머리 == NULL) 반환 NULL; ListNode * = 홀수 헤드; ListNode *도 = 머리 -> 다음; ListNode * evenhead = 머리 -> 다음; 반면 (심지어 && 짝수 -> 다음) { 홀수 -> 다음 = 홀수 -> 다음 -> 다음; 홀수 홀수 = -> 다음; 도 -> 다음 =도 -> 다음 -> 다음; 심지어 =도 -> 다음; 홀수 -> 다음 = evenhead; 머리를 반환; } };