链表的传值和增加一个值且把一个结点删掉删除(C++)

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个参数:要被改变的结点的值  头结点    改变后的值
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值