leetcode 21. Merge Two Sorted Lists(C语言,合并两个排序的链表为一个排序链表)32

来源:互联网 发布:cf手游剑齿虎优化 编辑:程序博客网 时间:2024/06/15 22:40

贴原题:

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.

解析:
  题目意思在标题就说明了,合并两个排序的链表为一个排序链表,这种题也是数据结构里的基础题目。
  我的思路是声明出两个链表指针,一个指向要返回的链表头结点,另一个(p)用来在要返回的链表上移动,即指向链表最后一个元素,用这个指针链接每个元素。然后顺序比较l1和l2的元素大小,那个大则p就指向该元素,并移位。

贴代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {    if(!l1)//第一个链表为空,则直接返回第二个链表    {        return l2;    }    if(!l2)//第二个链表为空则返回第一个    {        return l1;    }    struct ListNode *p, *list;    if(l1->val <= l2->val)//比较l1和l2头结点    {        p = l1;        l1 = l1->next;    }    else    {        p = l2;        l2 = l2->next;    }    list = p;//使list指向头结点    while(l1 && l2)//其中一个链表插入完则跳出循环    {        if(l1->val < l2->val)        {            p->next = l1;            l1 = l1->next;//指向下一个元素        }        else        {            p->next = l2;            l2 = l2->next;        }        p->next->next = NULL;//清空下下一个节点        p = p->next;//移向新增加的节点    }    if(l1)//使p->next指向剩下未完结的链表的头结点    {        p->next = l1;    }    else if(l2)    {        p->next = l2;    }    return list;}
阅读全文
0 0