链表中添加一个节点和删除一个节点

     


       这里主要记录单向列表添加和删除一个指定位置节点的书写方法。


       首先先创建链表节点数据的基本类型:

  

     

#ifndef NODE_H
#define NODE_H
#include "Person.h"


class Node
{
public:
	Person data;     //数据域
	Node *next;   //指向下一个节点
	void printNode();
};

#endif // !NODE_H

       接下来创建节点的节本类型:

class List
{
public:
	List();
	~List();
	void clearList();
	bool listEmpty();
	int listLength();
	bool getElement(int i, Node *pNode);
	int locateElement(Node *pNode);
	bool priorElement(Node *pCurrentNode, Node *pPreNode);
	bool nextElement(Node *pCurrentNode, Node *pNextNode);
	void listTraverse();
	bool listInsert(int i, Node *pNode);
	bool listDelete(int i, Node *pNode);
	bool listInsertHead(Node *pNode);
	bool listInsertTail(Node *pNode);
private:
	Node *m_pList;
	int m_iSize;
	int m_iLength;
 
};
#endif

        往指定节点添加函数如下所示:


bool List::listInsert(int i, Node *pNode)
{
	if (i<0 || i>m_iLength)
	{
		return false;
	}
	Node *currentNode = m_pList;
	for (int k = 0; k < i; k++)
	{
		currentNode = currentNode->next;
	}
	
	Node *newNode = new Node;
	if (newNode == NULL)
	{
		return false;
	}
	newNode->data = pNode->data;
	newNode->next = currentNode->next;     //原本currentNode的下一节点变为了newNode的下一个节点
	currentNode->next = newNode;           //newNode成为了currentNode的下一节点
	m_iLength++;

	return true;

}

       删除指定节点函数:

bool List::listDelete(int i, Node *pNode)
{
	if (i < 0 || i >= m_iLength)
	{
		return false;
	}
	Node *currentNode = m_pList;
	Node *currentNodeBefore = NULL;

	for (int k = 0; k <= i; k++)
	{
		currentNodeBefore = currentNode;
		currentNode = currentNode->next;
	}
	currentNodeBefore->next = currentNode->next;
	pNode->data = currentNode->data;      //取出currentNode的值
	delete currentNode;
	currentNode = NULL;
	m_iLength--;

	return true;

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值