文章目录
- 1.19删除链表的倒数第N个节点【代码随想录已刷】
 - 2.20有效的括号【代码随想录已刷】
 - 3.21合并两个有序链表
 - 3.1.题目
 - 3.2.题解
 
1.19删除链表的倒数第N个节点【代码随想录已刷】
参考:力扣题目链接;自己的博客解答
2.20有效的括号【代码随想录已刷】
参考:力扣题目链接;自己的博客解答
3.21合并两个有序链表
参考:力扣题目链接;题解
3.1.题目

3.2.题解
这道题目其实很简单,因为两个链表都是已经排序好的,结果只需要同时遍历两个链表的节点,然后判断那个数值更小,然后就选择哪个节点即可。然后再继续往后遍历后面的节点。
需要注意的是,这里要使用一个虚拟头节点来引导生成的链表,这样更方便编程。
注意:这道题目总记得非常熟悉,实际上有一道相加两个链表的节点的题目,跟这道题目非常像。
最后给出代码如下,非常简单:
ListNode *mergeTwoLists(ListNode *list1, ListNode *list2)
{
    ListNode* dummy = new ListNode(0);  // dummy虚拟头节点
    ListNode* cur = dummy;
    // 遍历list1和list2,都不能是空
    while(list1 && list2)
    {
        // 选择小的那个数,作为下一个节点
        if(list1->val < list2->val)
        {
            cur->next = list1;
            list1 = list1->next;
        }
        else
        {
            cur->next = list2;
            list2 = list2->next;
        }
        cur = cur->next;
    }   
    // 到了这个地方之后,list1和list2中可能有非空的,那么就把剩下的再拼接到cur中
    // 如果list1和list2都是空,那么结果就是走else,cur->next也是空,也是符合要求的
    if(list1)
        cur->next = list1;
    else
        cur->next = list2;
    
    // 最后把拼接后的头节点取出来,并把dummy节点删掉
    ListNode* res = dummy->next;
    delete dummy;
    
    return res;
}
                


















