struct MyData//取3个值
{
int price1;
int price2;
int price3;
};
struct AddListNode//链表结构
{
MyData data;
AddListNode* pNext;
};
AddListNode* creakNode()
{
AddListNode* pHeaderNode = NULL;
AddListNode* pPreNode = NULL;
AddListNode* pMyNode = NULL;
int nLen = sizeof(AddListNode);
pMyNode = nullptr;
for (int i = 1;i <= 4;i++)
{
for (int j = 1;j <= 4;j++)
{
for (int z = 1;z <= 4;z++)
{
if (z != i && z != j && j != i)
{
pMyNode = new AddListNode;
pMyNode->pNext = NULL;
if (pMyNode != NULL)
{
pMyNode->data.price1 = i;
pMyNode->data.price2 = j;
pMyNode->data.price3 = z;
}
if (pPreNode == nullptr)
pHeaderNode = pMyNode;
else
pPreNode->pNext = pMyNode;
pPreNode = pMyNode;
}
}
}
}
return pHeaderNode;
}
AddListNode* FindAndAddNode(int nValue, AddListNode* pHeader, int Add)
{
int nX = nValue / 100;
int nY = (nValue / 10) % 10;
int nZ = nValue%10;
int Addx = Add / 100;
int Addy = (Add / 10)%10;
int Addz = Add % 10;
AddListNode* pCur = pHeader;//当前指针
AddListNode* pAdd = NULL; // 新增结点
AddListNode* pPre = NULL; // 上一个结点
while (pCur)
{
if (pCur->data.price1 == nX && pCur->data.price2 == nY && pCur->data.price3 == nZ)
{ // 找到结点
pAdd = new AddListNode;//创建一个空间
pAdd->pNext = NULL;
pAdd->data.price1 = Addx;
pAdd->data.price2 = Addy;
pAdd->data.price3 = Addz;
pAdd->pNext = pCur->pNext;
if (pPre)//前一个结点不为空
{
pPre->pNext = pAdd;把找到的结点的前一个结点的后一个结点给到我们所给的空间
return pHeader;//返回头结点
}
else
{// 是第一个指针
return pAdd;//返回我们给的空间 ------前提是这是头结点--也就是传进来的前一个结点为空
}
}
else
{
pPre = pCur;//把当前值给到前一个值
pCur = pCur->pNext;//把当前的下一个值给到当前
}
delete pHeader;//删除结点
printf("%d%d%d", pCur->data.price1, pCur->data.price2, pCur->data.price3);//打印
}
return NULL;//如果遍历找不到所传进来的值就返回空
int main()
{
AddListNode* pMyTest = NULL;
pMyTest = creakNode();
int nA = 123;//定义值
int nAdda = 999;//定义值
FindAndAddNode(nA, pMyTest,nAdda);//3个参数:要被改变的结点的值 头结点 改变后的值