剑指offer-基础练习-链表-增删节点

/*
链表基本操作:
	插入节点和删除节点
*/
/*
思路:
	使用指向链表的头指针,这样在新插入节点后,头指针不会改变
*/

struct ListNode{
	int value;
	ListNode* next;
}

void AddToTail(ListNode** pHead,int value){
	if(pHead == null){
		return;
	}
	//新建节点
	ListNode *pNew = new ListNode();
	pNew->value = value;
	pNew->next = null;
	
	//当为空链表时
	if(*pHead == null){
		*pHead = pNew;
	}else{
		//遍历到链表的最后一个节点
		ListNode *pNode = *pHead;
		while(pNode->next != null){
			pNode = pNode->next;
		}
		pNode->next = pNew;
	}
}

void RemoveNode(ListNode** pHead,int value){
	if(pHead == null || *pHead == null){
		return;
	}
	ListNode* toBeDeleted = null;
	ListNode* pNode = pHead;
	
	
	if((*pHead)->value == value){
		toBeDeleted = *pHead;
		pHead = toBeDeleted;
	}else{
		while(pNode->next != null && pNode->next->value != value){
			pNode = pNode->next;
		}
		if(pNode->next != null && pNode->next->value == value){
			toBeDeleted = pNode->next;
			pNode->next = pNode->next->next;
		}
	}		
	
	if(toBeDeleted != null){
		delete(toBeDeleted);
		toBeDeleted = null;
	}
}

   

猜你喜欢

转载自www.cnblogs.com/buaaZhhx/p/11808490.html