LeetCode 21 합하여 두 정렬 연결리스트 (C # 1 실행) - 체인 재귀 반복을

첫째, 문제

https://leetcode-cn.com/problems/merge-two-sorted-lists/

두 사람은 새로운 정렬 된 목록 및 반환에 목록을 명령했다. 새로운 목록은 두 목록으로 구성 주어진 모자이크의 모든 노드입니다.

예 :

입력 : . 1 -> 2 -> 4 , 1. -> 3. -> (4) 
출력 : . 1 -> . 1 -> 2 -> . (3) -> (4) -> (4)

두, GitHub를 달성 : https://github.com/JonathanZxxxx/LeetCode/blob/master/MergeTwoListsClass.cs

  블로그 : https://www.cnblogs.com/zxxxx/

셋째, 아이디어
  재귀 두리스트의 헤드 소자의 크기를 결정하는 단계는, 재귀 판정 결과가 숫자로 첨가

  2 반복 : 헤드 센티넬 노드의 설정은, 각각의 반복 이전의 작은 값으로 이전 액세스 노드 뒤에 목록 헤드의 두 요소의 크기를 결정되는 포인터 이전 다음 포인터 조정을 유지하는 액세스 목록 반면 및 시프트 이전

넷째, 코드 구현

1 개      공용  클래스 MergeTwoListsClass
 2      {
 3 개          공용  클래스 ListNode
 -4-          {
 5              공개  INT의 발을;
6              공공 ListNode 다음;
7              공개 ListNode ( INT X) {브로 = X; }
 8          }
 9  
10          ///  <요약> 
11          /// 递归
 12          ///  </ 요약> 
13          ///  <매개 변수 이름 = "L1"> </ PARAM> 
14          ///  <매개 변수 이름 = "L2 "> </ PARAM> 
15          /// <리턴> </ 반환> 
16          공용 ListNode의 MergeTwoLists (ListNode L1, L2 ListNode)
 17          {
 18 일              경우 (L1 == null의 ) 복귀 L2;
(19)              그 밖의  경우 (L2 ==  ) (L1);
(20)              그 밖의  경우 (l1.val < l2.val)
 21              {
 22                  l1.next = MergeTwoLists (l1.next, L2);
(23)                  반환 (L1);
24              }
 25              다른 
26              {
 (27)                 l2.next = MergeTwoLists (l2.next, L1);   
(28)                  반환 L2;
29              }
 30          }
 31  
32          ///  <요약> 
33          /// 迭代
 34          ///  </ 요약> 
35          ///  <매개 변수 이름 = "L1"> </ PARAM> 
36          ///  <매개 변수 이름 = " L2 "> </ PARAM> 
37          ///  <리턴> </ 반환> 
38          공용 ListNode MergeTwoLists2 (ListNode L1, L2 ListNode)
 39          {
 40              VAR의 머리 = 새로운 ListNode (- 1 );
             var에 이전 = 머리;
42              동안 (! = L1  ! && L2 = )
 43              {
 44                  의 경우 (l1.val < l2.val)
 45                  {
 46                      prev.next = L1;
(47)                      (L1) = l1.next;
(48)                  }
 (49)                  
50                  {
 51                      prev.next = L2;
(52)                      L2 = l2.next;
53                  }
 54                 이전 = prev.next;
55              }
 56              prev.next = L1 ==  ? L2 : L1;
(57)              반송 head.next;
58          }
 59      }

 

추천

출처www.cnblogs.com/zxxxx/p/12163465.html