实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点

实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
给定待删除的节点,请执行删除操作,若该节点为尾节点,返回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;
}

 

你可能感兴趣的:(数据结构算法)