NC289. 删除链表的节点
描述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
示例1
输入:
{2,5,1,9},5
输出:
{2,1,9}
说明:
给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9示例2
输入:
{2,5,1,9},1
输出:
{2,5,9}
说明:
给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 2 -> 5 -> 9C++ 解法, 执行用时: 4ms, 内存消耗: 896KB, 提交时间: 2022-02-09
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param val int整型 * @return ListNode类 */ ListNode* deleteNode(ListNode* head, int val) { // write code here ListNode *myHead = new ListNode(-1);//手动添加一个头节点在头节点之前 myHead->next = head; ListNode *pre = myHead, *cur = head; while(cur) { if(cur->val == val) { cur = cur->next; pre->next = cur;//相等,找到了,删除,跳出循环 break; } else{ cur = cur->next; pre = pre->next;//不等,依次后走一步 } } return myHead->next; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 904KB, 提交时间: 2021-11-20
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: ListNode* deleteNode(ListNode* head, int val) { ListNode* vhead = new ListNode(-1); vhead->next = head; for (auto pre = vhead, cur = head, nxt = cur->next; cur; cur = nxt, nxt = cur->next) { if (val == cur->val) { delete cur; pre->next = nxt; } else pre = cur; if (!cur) break; } return vhead->next; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 908KB, 提交时间: 2022-02-09
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param val int整型 * @return ListNode类 */ ListNode* deleteNode(ListNode* head, int val) { // write code here if(head == nullptr){ return head; } if(head->val == val){ return head->next; } ListNode* node = head; while(node!=nullptr){ if(node->next->val == val){ node->next = node->next->next; break; } node = node->next; } return head; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 912KB, 提交时间: 2021-11-13
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param val int整型 * @return ListNode类 */ ListNode* deleteNode(ListNode* head, int val) { // write code here ListNode* dummy=new ListNode(-1); ListNode* pre=dummy,*cur=head; pre->next=cur; if(!head)return 0; while(cur){ if(cur->val==val){ cur=cur->next; pre->next=cur; } cur=cur->next; pre=pre->next; } return dummy->next; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 916KB, 提交时间: 2021-11-26
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param val int整型 * @return ListNode类 */ ListNode* deleteNode(ListNode* head, int val) { ListNode* cur=head,*left; if(cur->val==val) return head=head->next; left=cur; cur=cur->next; while(cur){ if(cur->val==val){ left->next=cur->next; return head; } cur=cur->next; left=left->next; } return head; } };