Leetcode 21. Merge Two Sorted Lists(easy)
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
递归实现:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == NULL){ return l2; } if (l2 == NULL){ return l1; } if (l1 -> val <= l2 -> val){ l1 -> next = mergeTwoLists(l1 -> next, l2); return l1; } else{ l2 -> next = mergeTwoLists(l1, l2 -> next); return l2; } } };
非递归实现:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == NULL){ return l2; } if (l2 == NULL){ return l1; } ListNode head(0); // 新建一个结点,不能是指向空的指针,否则它的指向不会改变 ListNode * cur = &head; while (l1 && l2){ if (l1 -> val <= l2 -> val){ cur -> next = l1; l1 = l1 -> next; }else{ cur -> next = l2; l2 = l2 -> next; } cur = cur -> next; } if (l1){ cur -> next = l1; } if (l2){ cur -> next = l2; } return head.next; // 注意head此时为一个实体对象,不是一个指针,所以要用.来指示next.为什是next?? } };