2020/12/24二刷
//双指针法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(!head||head -> val == val) {
head = head -> next;
return head;
}
ListNode* cur = head -> next;
ListNode* pre = head;
while(cur) {
if(cur -> val == val) {
pre -> next = cur -> next;
return head;
}
pre = cur;
cur = cur -> next;
}
return nullptr;
}
};
水题
----------------------------一刷-----------------------------------------------------------------------
题目描述
解法 双指针
定义指针cur 指向当前节点,pre指向cur的前一个节点.
当发现cur所指向的节点的val值为所需删除的值时,pre->next=cur->next使上一个结点直接连接所删除结点指向的下一个结点。
遍历的时候只需要每次让pre等于cur,然后cur=cur->next。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(head -> val == val){
head = head -> next;
return head;
}
ListNode *cur = head -> next;
ListNode *pre = head;
while(cur){
if(cur -> val == val){
pre->next=cur->next;
return head;
}
pre=cur;
cur=cur->next;
}
return nullptr;
}
};
时间复杂度O(n),空间复杂度O(1)