제목 설명
규칙을 감소 - 두 단조 두 목록의 합성 후 입력 목록 및 출력 목록을 증가, 물론, 그 후 우리는 합성 목록을 충족해야합니다.
문제 해결 아이디어
두 솔루션 : 재귀 및 비 - 재귀
이 항목에서는 병합 정렬 작업을 병합에, 순서 배열에 두 개의 정렬 된 배열 (목록).
비 재귀 :
첫 번째는 루프 동안, L1 또는 L2까지 L1 및 listNode 작은 병합 올 것이다 (L2)를, 비교하는 것은 비어
루프 L1 또는 L2가 나머지 노드 listNode에 두 번째 및 세 번째 while 루프 합류하면서
마지막으로, firstNode.next // 헤드 노드가 필요하지 않습니다 반환
참조 코드
재귀 : 상영 시간 : 27ms 메모리를 차지 : 9564k
1 / * 2 공용 클래스 ListNode { 3 INT의 발; 4 ListNode 다음 = NULL; 5 6 ListNode (INT의 발) { 7 this.val = 브로; 8 } 9 } * / 10 공용 클래스 해결 { 11 공용 ListNode 병합 (ListNode리스트 1, ListNode리스트 2) { 12 의 경우 (리스트 1 == 널 ) { 13 반환 리스트 2; 14 } 15 의 경우 (리스트 2 == 널 ) { 16 반환목록 1; 17 } 18 ListNode 헤드 = 널 ; 19 일 경우 (list1.val < list2.val) { 20 머리 = 목록 1; 21 head.next = 병합 (list1.next,리스트 2); 22 } 다른 { 23 머리 = 리스트 2; 24 head.next = 병합 (리스트 1, list2.next); 25 } 26 리턴 헤드; 27 } 28 }
비 재귀 : 상영 시간 : 26MS 메모리를 가지고 : 9544k를
1 / * 2 공용 클래스 ListNode { 3 INT의 발; 4 ListNode 다음 = NULL; 5 6 ListNode (INT의 발) { 7 this.val = 브로; 8 } 9 } * / 10 공용 클래스 해결 { 11 공용 ListNode 병합 (ListNode L1, L2 ListNode) { 12 ListNode listNode = 새로운 ListNode (0 ); 13 ListNode firstNode = listNode; (14) 동안 (L1! = null의 && (L2)! = null이) { // L1 작은 listnode, L1 또는 L2에 혼입 될 올 (L2)과 비교 될 때까지 비어 (15) IF (l1.val <= l2.val) { 16 listNode.next = ; L1 . 17 (L1) = L1. 다음으로, 18은 } 다른 { 19. listNode.next = L2; 20된다 L2 = l2.next; 21이다 } 22된다 listnode = listNode.next; 23이다 } 24 그동안 (! L1 = 널 ) { // L2 비우면 나머지 것 L1은 listNode에서 추가 25 = listNode.next의 L1] (26)는 L1 = l1.next; 27 listnode = listNode.next; 28 } 29 그동안 (! = L2 는 null ) { // 빈 L1은 L2 나머지는 listnode에 첨가 될 경우 30 listnode. 다음 = L2; 31은 L2 = l2.next; 32 listnode = listNode.next; 33이다 } (34)이 복귀 firstNode.next; 35 } 36 }