c_cpp 删除O(1)中链表中的节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 删除O(1)中链表中的节点相关的知识,希望对你有一定的参考价值。

void delete_node(TreeNode **head, TreeNode *p) {
	if(*head == NULL || p == NULL) return;
	if(*head == p) {
		delete p;
		p = NULL; // necessary
		*head = NULL;
		return;
	}
	if(p->next != NULL) {
		TreeNode *nxt = p->next;
		p->val = nxt->val;
		p->next = nxt->next;
		delete nxt;
		nxt = NULL; // necessary
	}
	else {
		TreeNode *c = *head;
		while(c->next->next) {
			c = c->next;
		}
		delete c->next;
		c->next = NULL;
	}
}

// another way
void delete_node(node *head, node *p) {
  if(!head || !p) return;
  node dummy(-1);
  dummy.next = head;
  if(p == head) {
    dummy.next = head->next;
    delete head;
    head = dummy.next;
    return;
  }
  if(p->next) {
    ...
  } else {
    ...
  }
  
}

以上是关于c_cpp 删除O(1)中链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章

C中链表中的错误

c语言中链表的问题

Python中链表中的'AttributeError'

c_cpp 从已排序的链表中删除重复值节点 - Hackerrank

链表问题----删除倒数第K个节点

剑指Offer之在O时间删除链表节点