问题:合并两个有序链表
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/description/
C系风格:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 11 12 9 */ 10 class Solution { 11 public: 12 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 13 ListNode* head = l1; 14 if (l1 == NULL) return l2; 15 if (l2 == NULL) return l1; 16 17 bool isEnd = false; 18 while (l2 != NULL&&isEnd==false) 19 { 20 ListNode* temp = new ListNode(l2->val); 21 while (l1 != NULL) 22 { 23 if (l1->next != NULL) 24 { 25 if (l2->val >= l1->val&&l2->val < l1->next->val) 26 { 27 temp->next = l1->next; 28 l1->next = temp; 29 break; 30 } 31 else if (l2->val > l1->val&&l2->val > l1->next->val) 32 { 33 l1 = l1->next; 34 //break; 35 } 36 else if (l2->val == l1->next->val) 37 { 38 l1 = l1->next; 39 //break; 40 } 41 else if (l2->val < l1->val) 42 { 43 temp->next = l1; 44 l1 = temp; 45 head = l1; 46 break; 47 } 48 } 49 else 50 { 51 if (l1->val == l2->val) 52 { 53 l1->next = l2; 54 isEnd = true; 55 } 56 else if (l1->val<l2->val) 57 { 58 l1->next = l2; 59 isEnd = true; 60 } 61 else if(l1->val>l2->val) 62 { 63 ListNode* node=new ListNode(l1->val); 64 l1->val=l2->val; 65 l1->next=node; 66 //isEnd = true; 67 } 68 break; 69 } 70 } 71 l2 = l2->next; 72 } 73 return head; 74 } 75 };
Python风格:
1 # Definition for singly-linked list. 2 # class ListNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution(object): 8 def mergeTwoLists(self, l1, l2): 9 """ 10 :type l1: ListNode 11 :type l2: ListNode 12 :rtype: ListNode 13 """ 14 head = l1 15 if l1 is None: 16 return l2 17 if l2 is None: 18 return l1 19 20 isEnd = False; 21 while l2 != None and isEnd == False: 22 temp = ListNode(l2.val) 23 while l1 != None: 24 if l1.next != None: 25 print l1 26 if l2.val >= l1.val and l2.val < l1.next.val: 27 temp.next=l1.next 28 l1.next=temp 29 break 30 elif l2.val>l1.val and l2.val>l1.next.val: 31 l1=l1.next 32 elif l2.val == l1.next.val: 33 l1=l1.next 34 elif l2.val <l1.val: 35 temp.next=l1 36 l1=temp 37 head=l1 38 break 39 else: 40 if l1.val == l2.val: 41 l1.next=l2 42 isEnd=True 43 elif l1.val<l2.val: 44 l1.next=l2 45 isEnd=True 46 elif l1.val>l2.val: 47 node=ListNode(l1.val) 48 l1.val=l2.val 49 l1.next=node 50 break 51 l2=l2.next 52 return head 53