溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在O(1)時間刪除鏈表節(jié)點

發(fā)布時間:2020-06-15 16:47:20 來源:網(wǎng)絡 閱讀:233 作者:秋笙夏笛 欄目:編程語言


思路:

時間復雜度要求為O(1),已知要刪除的節(jié)點,可以找到該節(jié)點的下一個節(jié)點,把下一個節(jié)點的相關信息復制到要刪除的節(jié)點上,刪除下一個節(jié)點,可以達到題目要求。

注意:刪除尾節(jié)點時需要遍歷一遍,刪除頭結點時,需要把頭結點移到下一個節(jié)點。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

struct Listnode
{
	int _value;
	Listnode* _next;
};
void Init(Listnode*& head)
{
	Listnode* cur =head;
	if(cur==NULL)
	{
		cur=(Listnode*)malloc(sizeof(Listnode));
		cur->_next=NULL;
		cur->_value=0;
	}
	head=cur;
}

void push(Listnode*& head,int value)
{
	Listnode* cur =head;

		while(cur->_next)
		{
			cur=cur->_next;
		}
		Listnode* tmp=NULL;
		tmp=(Listnode*)malloc(sizeof(Listnode));
		tmp->_next=NULL;
		tmp->_value=value;
		cur->_next=tmp;
	
		

}
void pop(Listnode* head)
{
	Listnode* cur=head;
	Listnode* prev=NULL;
	while(cur->_next!=NULL)
	{
		prev=cur;
		cur=cur->_next;
	}
	prev->_next=NULL;
	free(cur);
	cur=NULL;
}
void print(Listnode* head)
{
	Listnode* cur=head;
	while(cur)
	{
		printf("%d\n",cur->_value);
		cur=cur->_next;
	}
}
Listnode* Find(Listnode* head,int value)
{
	assert(head);
	Listnode* cur=head;
    while(cur)
	{
		if(cur->_value==value)
		{
			return cur;
		}
		else
		{
			cur=cur->_next;
		}
	}
}
void DeleteNode(Listnode* &head,Listnode* pToBeDeleted)
{
	Listnode* cur=head;
	if(cur==NULL)
	{
		return;
	}
	if(pToBeDeleted==head)
	{
		head=cur->_next;
		free(cur);
		cur=NULL;
		return;
	}
	Listnode* last=pToBeDeleted->_next;
	if(last!=NULL)
	{
		pToBeDeleted->_value=last->_value;
		pToBeDeleted->_next=last->_next;
		free(last);
		last=NULL;
	}
	else    //刪除的是尾節(jié)點
	{
		Listnode* prev=NULL;
		while(cur->_next!=NULL)
		{
			prev=cur;
			cur=cur->_next;
		}
		prev->_next=NULL;
		free(cur);
		cur=NULL;
	}
}
void test()
{
	Listnode* head=NULL;
	Init(head);
    push(head,1);
	push(head,2);
	push(head,3);
	/*pop(head);*/
	print(head);
	Listnode* tmp=Find(head,1);
	DeleteNode(head,head);
	print(head);

}
int main()
{
	test();
	system("pause");
	return 0;
}

結果:

在O(1)時間刪除鏈表節(jié)點

在O(1)時間刪除鏈表節(jié)點



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI