Cool说丨力扣237、206与21

简介: 237. 删除链表中的节点206. 反转链表21. 合并两个有序链表

237. 删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

现有一个链表 -- head = [4,5,1,9],它可以表示为:


示例 1:

输入: head = [4,5,1,9], node = 5

输出: [4,1,9]

解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

示例 2:

输入: head = [4,5,1,9], node = 1

输出: [4,5,9]

解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.


说明:

  • 链表至少包含两个节点。
  • 链表中所有节点的值都是唯一的。
  • 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
  • 不要从你的函数中返回任何结果。

第一版,替身攻击那种

执行用时 :12 ms, 在所有 cpp 提交中击败了98.53%的用户

内存消耗 :9.2 MB, 在所有 cpp 提交中击败了47.23%的用户

   voiddeleteNode(ListNode*node) {

        node->val=node->next->val;

       node->next=node->next->next;

       

   }

206. 反转链表

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

第一版,反转

执行用时 :12 ms, 在所有 cpp 提交中击败了78.92%的用户

内存消耗 :9.2 MB, 在所有 cpp 提交中击败了20.28%的用户

structListNode {

   intval;

   ListNode*next;

   ListNode(intx) :val(x), next(nullptr) {}

};

ListNode*reverseList(ListNode*head) {

   ListNode*pre=nullptr;

   ListNode*curr=head;

   ListNode*next=nullptr;

   while (curr) {

       next=curr->next;

       curr->next=pre;

       pre=curr;

       curr=next;

   }

   returnpre;

}

21. 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4

输出:1->1->2->3->4->4

第一版,熟悉一下怎么写的再说

执行用时 :12 ms, 在所有 cpp 提交中击败了77.75%的用户

内存消耗 :9 MB, 在所有 cpp 提交中击败了76.64%的用户

structListNode {

   intval;

   ListNode*next;

   ListNode(intx) :val(x), next(nullptr) {}

};

ListNode*mergeTwoLists(ListNode*l1, ListNode*l2) {

   if (l1==nullptr) returnl2;

   if (l2==nullptr)  returnl1;

   ListNode*res=nullptr;

   if (l1->val<=l2->val) {

       res=l1;

       l1=l1->next;

   }

   else {

       res=l2;

       l2=l2->next;

   }

   ListNode*head=res;

   while (l1&&l2) {

       if (l1->val<=l2->val) {

           res->next=l1;    

           l1=l1->next;

           res=res->next;

       } else {

           res->next=l2;

           l2=l2->next;

           res=res->next;

       }

   }

   res->next=l1==nullptr?l2 : l1;

   returnhead;

}


目录
相关文章
|
人工智能 C# C++
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
135 1
|
C# C++
Cool说丨力扣287/792/378
关注博主,获取更多知识
112 0
|
C# C++ 索引
Cool说丨力扣162
162. 寻找峰值
100 0
|
存储 C# C++
Cool说丨力扣29/34
关注博主。获取更多知识
112 0
|
存储 C# C++
Cool说丨力扣392
392. 判断子序列
77 0
|
C# C++
Cool说丨力扣744、704
744. 寻找比目标字母大的最小字母 704. 二分查找
111 0
|
C#
Cool说丨力扣475
475. 供暖器
119 0
|
机器学习/深度学习 算法 C#
Cool说丨力扣202
202. 快乐数
104 0
|
C#
Cool说丨力扣167
167. 两数之和 II - 输入有序数组
73 0
|
C# C++
Cool说丨力扣374、441
441. 排列硬币 374. 猜数字大小
99 0