题目来源:https://leetcode.cn/problems/merge-two-sorted-lists/description/
C++题解:先声明两个指向为空的ListNode类型,分别表示一头一尾。根据list1和list2第一个节点的大小比较来确定谁为head,tail暂时也指向同一地址。再根据后续链表的大小比较,tail->next进行新的指向,tail同步移动,走完一个list之后,tail->next指向剩余部分。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1==NULL && list2==NULL) return NULL;
if(list1!=NULL && list2==NULL) return list1;
if(list1==NULL && list2!=NULL) return list2;
ListNode* tail = NULL, * head = NULL; //ListNode类型,指向为空
while(list1 && list2){
if(list1->val <= list2->val){
if(head == NULL){ //判断是否为链表头
head = tail = list1; //指向同一地址,但是tail需要有next指针往下继续走
}
else{
tail->next = list1;
tail = tail->next;
}
list1 = list1->next;
}
else{
if(head == NULL){ //判断是否为链表头
head = tail = list2; //指向同一地址
}
else{
tail->next = list2;
tail = tail->next;
}
list2 = list2->next;
}
}
//更新尾指针
if(list1){
tail->next = list1;
}
if(list2){
tail->next = list2;
}
return head;
}
};
其实单从题目来说应该是简单的,奈何我大一时C++没学好,不会链表,所以简单题对我来说也稍显困难(站在了他人的肩膀上完成的,忽然就又想起了大一的老师说“天下代码一大抄”),如果哪些名词说的不对还望指正。