yxc solution
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
*(node) = *(node->next);
}
};
评论解法:树雪雪查
因为前一个结点的指针域,存的依然是,你要删除的这个节点的地址,你要么把你要删除的这个节点的所有值变成下一个节点的值,要么就得改变前一个结点的指针域,这个题没有前一个结点的信息,所以只能改变值。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
// *node = *((*node).next);
// *node = *(node->next);
node->val = node->next->val;
node->next = node->next->next;
}
};
理解
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL){}
};
class Solution {
public:
void deleteNode(ListNode* node) {
*node=*(node->next);
}
};
int main(){
ListNode* a = new ListNode(1);
ListNode* b = new ListNode(2);
ListNode* c = new ListNode(3);
ListNode* d = new ListNode(4);
ListNode* e = new ListNode(5);
a->next=b;
b->next=c;
c->next=d;
d->next=e;
Solution s;
s.deleteNode(b);
// 节点b的val和next完全等于c的val和next。
// 节点b替代了c,c不再被遍历,也就是删除了b。
for(ListNode* i = a; i!=NULL; i=i->next){
cout<<i->val<<endl;
}
return 0;
}