LeetCode 21. Merge Two Sorted Lists

来源:互联网 发布:laravel nginx 编辑:程序博客网 时间:2024/04/30 18:08

题目

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.

思路

取a的长度,从后往前,如果当前不为空格,且当前位置>0,位置往前移动,计数加1

代码

1. 递归法:

/** * 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的值比l2的值小,递归调用l1的下一个与l2比较            l1->next = mergeTwoLists(l1->next, l2);            return l1;        } else {//反之同理            l2->next = mergeTwoLists(l2->next, l1);            return l2;        }    }};

输出结果: 12ms

2. 非递归法:

/** * 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 *mergeHead = NULL;//重新构建一个链表的头节点和尾节点        ListNode *current = NULL;             while(l1!=NULL && l2!=NULL){//当两个都不为空时            if(l1->val <= l2->val){//如果l1的值比l2小于等于                if(mergeHead == NULL){//如果mergeHead为空                   mergeHead = current = l1;//头和尾都为l1                }else{                   current->next = l1;//否则current的下一个为l1                   current = current->next;//current指向当前位置的下一个                }                l1 = l1->next;//l1也指向下一个            }else{//如果l1的值比l2大时,同理                if(mergeHead == NULL){                   mergeHead = current = l2;                }else{                   current->next = l2;                   current = current->next;                }                l2 = l2->next;            }        }        if(l1 == NULL){//如果l1为空了,l2剩下的给current的下一个            current->next = l2;        }else{//如果l2为空了,l1剩下的给current的下一个            current->next = l1;        }        return mergeHead;    }};

**输出结果:**19ms

0 0
原创粉丝点击