剑指offer——链表相关操作 c++

本文详细介绍了单向链表的基本节点定义,以及如何在链表末尾添加节点和删除包含特定值的节点的方法。通过具体代码实现,帮助读者深入理解链表数据结构的操作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单向链表的节点定义:

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 = nullptr;

	 if(*pHead == nullptr)
	 {
	    	*pHead =pNew;
	 }
	 else
	 {
	   	ListNode*pNode = *pHead;
	    	while(pNode->m_pNext !=nullptr)
	 	   	pNode =pNode->m_pNext;
	 	   pNOde->m_pNext = pNew;
	 }
}

找到一个包含某值的节点并删除该节点

void RemoveNode(ListNode**pHead,int value)
{
	 if(pHead ==nullptr ||*pHead ==nullptr)
		    return ;
	 ListNode*pToBeDeleted =nullptr;
	 if((*pHead)->m_nValue==value)
	{
		   pToBeDeleted =*pHead;
		   *pHead =(*pHead)->m_pNext;
	}
	else
	{
		   ListNode*pNode =*pHead;
		   while(pNode->m_Next !=nullptr &&pNode->m_pNext->m_nValue !=value)
				        pNode =pNode ->m_pNext;
		   if(pNode ->m_pNext !=nullptr &&pNode ->m_pNext-> m_nValue ==Value)
		{
			     pToBeDeleted = pNode -> m_pNext;
			     pNode -> m_pNext = pNode ->m_pNext->m_pNext;
		}
	}
	if(pToBeDelected !=nullptr)
	{
		   delete pToBeDeleted;
		   pToBeDeleted =nullptr;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值