链表:在链表的末尾添加一个节点+删除链表中值为value的节点

Posted 努力奋斗-不断进化

tags:

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

 

链表介绍

链表是动态数据结构。

// 在链表的末尾增加一个节点

struct ListNode

	int m_nValue;
	ListNode* m_pNext;
;

// 在链表的末尾增加一个节点

void AddToTail(ListNode** PHead, int value)

	ListNode pNew = new ListNode();
	pNew->m_nValue = value;
	pNew->m_pNext = NULL;

	if (*pHead == NULL)
	
		*pHead = pNew;
	
	else
	
		ListNode* pNode = *pHead;

		while (pNode->m_pNext != NULL)    //目的是找最后一个节点
		
			pNode = pNode->m_pNext;      //变成下一个节点
		

		pNode->m_pNext = pNew; //找打了最后一个节点,把最后一个节点指向新加入的节点
	

 

//删除链表中值为value的节点

void RemoveNode(ListNode** pHead, int value)

	if (pHead == NULL || *pHead == NULL)
	
		return;
	

	ListNode* pToBeDeleted = NULL;

	if ((*pHead)->m_nValue == value)
	
		pToBeDeleted = *pHead;
		*pHead = (*pHead)->m_pNext;
	
	else
	
		ListNode* pNode = *pHead;
		while (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue!=value)
		
			pNode = pNode->m_pNext; //下一个节点不是空,且值不是目标值
		

		if (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue == value)  //下一个节点不是空,且值是目标值
		
			pToBeDeleted = pNode->m_pNext;
			pNode->m_pNext = pNode->m_pNext->m_pNext;//把指针指向下一个的下一个,相当于把下一个节点从链表中给删除了
		

		if (pToBeDeleted != NULL)
		
			delete pToBeDeleted;  //相当于在内存中删除了
			pToBeDeleted = NULL;
		
	

 

以上是关于链表:在链表的末尾添加一个节点+删除链表中值为value的节点的主要内容,如果未能解决你的问题,请参考以下文章

简单算法21.删除链表的结点

剑指Offer面试题18. 删除链表的节点

237. 删除链表中的节点

删除链表的节点(Python and C++解法)

链表----在链表中添加元素详解--使用链表的虚拟头结点

算法刷题:LC初级算法