> 文章列表 > 【力扣-21】合并两个有序链表

【力扣-21】合并两个有序链表

【力扣-21】合并两个有序链表

🖊作者 : Djx_hmbb
📘专栏 : 数据结构
😆今日分享 : 英文文章里 : TL;DR 或者 tl;dr。
网上英文解释有两种,一种是Too long;Don’t read,另一种是Too long;Didn’t read。意思是:“文章太长了,读不下去了”。
【力扣-21】合并两个有序链表

文章目录

  • ✔题目链接;
  • ✔题目:
  • ✔解题思路:
    • :>不用头结点--依次比较每个节点的大小
    • :> 使用头结点--依次比较每个节点的大小
  • ✔代码详情;
    • 🔎不用头结点
    • 🔎用头结点
  • 📖总结 :
    • 家人们,点个![请添加图片描述](https://img-blog.csdnimg.cn/11dae7d2dd1b46b2b021edaccee67cf1.jpeg)再走呗~

✔题目链接;

【力扣-21】合并两个有序链表

✔题目:

【力扣-21】合并两个有序链表

✔解题思路:

:>不用头结点–依次比较每个节点的大小

创建的 指针 : 新链表的头指针,比较节点大小的当前指针,next指针.【力扣-21】合并两个有序链表

:> 使用头结点–依次比较每个节点的大小

创建的指针 :

✔代码详情;

🔎不用头结点

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {struct ListNode* p1 = list1;struct ListNode* p2 = list2;struct ListNode* newNode = NULL,*cur = newNode;//如果链表1为空时,返回链表2if (list1 == NULL) {return list2;}//如果链表2为空时,返链表1if (list2 == NULL) {return list1;}//判断当前节点是否为空,为空时则结束查找比较while (p1 && p2) {struct ListNode* next1 = p1->next;struct ListNode* next2 = p2->next;//判断新链表的头结点是否为空//头结点为空if (newNode == NULL) {//取小值进行尾插if (p1->val < p2->val) {cur = newNode = p1;p1 = next1;if (next1)next1 = next1->next;}else  {cur = newNode = p2;p2 = next2;if (next2)next2 = next2->next;}}//头结点不为空else {if (p1->val < p2->val) {cur->next = p1;cur = p1;p1 = next1;if (next1)next1 = next1->next;}else  {cur->next = p2;cur = p2;p2 = next2;if (next2)next2 = next2->next;}        }}//判断是哪一个链表先为空的,将不为空的链接到新链表中if (p1 == NULL) {cur->next = p2;}else if (p2 == NULL) {cur->next = p1;}//返回return newNode;
}

🔎用头结点

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){if(l1 == NULL)return l2;else if(l2 == NULL)return l1;struct ListNode* head = NULL, *tail = NULL;//创建空链表head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));tail->next = NULL;while(l1 && l2){// 取小的进行尾插if(l1->val < l2->val){tail->next = l1;tail = tail->next;l1 = l1->next;}else{tail->next = l2;tail = tail->next;l2 = l2->next;}}//剩余元素直接拼接if(l1)tail->next = l1;elsetail->next = l2;struct ListNode* list = head->next;free(head);return list;
}

📖总结 :

带头结点的好处 :

  • 不用考虑新的链表头指针是否为空的情况(代码更简短) .

不带头节点的好处 :

  • 考试基本都是不带头节点的情况 , 这样更有利于我们思维训练 .

感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~