목록 : 두 개의 정렬 된 목록을 병합

 

제목 설명

규칙을 감소 - 두 단조 두 목록의 합성 후 입력 목록 및 출력 목록을 증가, 물론, 그 후 우리는 합성 목록을 충족해야합니다.

문제 해결 아이디어

두 솔루션 : 재귀 및 비 - 재귀

이 항목에서는 병합 정렬 작업을 병합에, 순서 배열에 두 개의 정렬 된 배열 (목록).

비 재귀 :

첫 번째는 루프 동안, 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 }

 

추천

출처www.cnblogs.com/carry6/p/11520868.html