- Delete Node in a Linked List
Implement an algorithm to delete a node in the middle of a singly linked list, given only access to that node.
Example
Example 1:
Input:
1->2->3->4->null
3
Output:
1->2->4->null
Example 2:
Input:
1->3->5->null
3
Output:
1->5->null
解法1:
每个节点copy后面一个节点的值。最后一个节点就删掉。
注意这种方法只能删除中间节点,不能删除最后一个节点!
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param node: the node in the list should be deletedt
* @return: nothing
*/
void deleteNode(ListNode * node) {
if (!node) return;
ListNode * node1 = node;
while(node) {
if (node->next) {
node->val = node->next->val;
if (!node->next->next) node->next = NULL;
node = node->next;
}
}
}
};
注意:
下面写法不对:
void deleteNode(ListNode * node) {
if (!node) return;
ListNode * node1 = node;
while(node) {
if (node->next) {
node->val = node->next->val;
node = node->next;
} else {
node = (ListNode *)NULL; //wong!
}
}
}
wrong的那一行把node指向NULL,但是其前节点还是指向node之前的那个地址。