첫째, 문제
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 }