实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true
直接free(p),这样行不通,因为我们不能访问其他结点;
如果我们只能访问该结点,可以尝试将该结点的后继结点的数据复制到当前结点,然后删除后继结点
typedef struct SListNode {
int value; // 保存的值
struct SListNode* next; // 保存下一个结点的地址
} SListNode_t;
bool deleteNode (SListNode_t *node) {
if( NULL == node || NULL == node->next )
{
return false;
}
SListNode_t * next = node->next;
node->value = next->value;
node->next = next->next;
return true;
}