题目描述
实现一种算法,删除单向链表中间的某个节点(除了第一个和最后一个节点,不一定是中间节点),假定你只能访问该节点。
解答一
class Solution {
public:
void deleteNode(ListNode* node) {
if(node->next==nullptr)
node=nullptr; //这句没有起作用,有点问题。
else{
while(node->next!=nullptr){
node->val=node->next->val;
if(node->next->next==nullptr){
break;
}
node=node->next;
}
node->next=nullptr;
}
}
};
解答二
//利用了该结点虽然不能删但它的下一个结点可以删的思想,而不是一味的把后结点的值往前赋。
class Solution {
public:
void deleteNode(ListNode* node) {
//将next结点的值 赋值给 当前结点
node->val = node->next->val;
//干掉next结点
ListNode* tmp = node->next;
node->next = node->next->next;
delete tmp;
}
};