吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1055|回复: 7
收起左侧

[求助] C 插入结点 填空题

[复制链接]
ing 发表于 2020-2-22 23:24

我被绕晕了,4)乱填的,需要一个详细的解答
3. 设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A的前面插入结点X时的操作序列为:
1) s->next=___A_______2) p->next=s3)t=p->data
4) p->data=___s_______5) s->data=t

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yanss 发表于 2020-2-23 00:17
我也等等答案
古月不傲 发表于 2020-2-23 00:37
本帖最后由 古月不傲 于 2020-2-23 01:10 编辑

[C] 纯文本查看 复制代码
#include <iostream>

using namespace std;

typedef struct _List
{
        struct _List *pNext;
        int nData;
}List, *pList;

pList CreateHeader()
{
        pList plist = new List;
        memset(plist, 0, sizeof(List));
        plist->pNext = NULL;
        plist->nData = 0;
        return plist;
}

void InsertEnd(pList *plist, int nData)
{
        pList pNew = new List;
        memset(pNew, 0, sizeof(List));
        pList pTemp = *plist;
        if ((*plist)->pNext == NULL)
        {
                (*plist)->pNext = pNew;
                pNew->pNext = NULL;
                pNew->nData = nData;
                return;
        }
        while (pTemp->pNext != NULL)
        {
                pTemp = pTemp->pNext;
        }
        pTemp->pNext = pNew;
        pNew->pNext = NULL;
        pNew->nData = nData;
}

void InsertAny(pList *plist, int nData, int nPos)
{
        pList pTemp = *plist;
        int i = 0;
        while (pTemp->pNext != NULL && i <= nPos - 1)
        {
                pTemp = pTemp->pNext;
                i++;
        }
        pList pNew = new List;
        memset(pNew, 0, sizeof(List));

        pNew->pNext = pTemp->pNext;
        pTemp->pNext = pNew;
        pNew->nData = nData;
}

void Print(pList *plist)
{
        pList pTemp = *plist;
        while (pTemp->pNext != NULL)
        {
                printf("地址:%x 值%d\n", pTemp->pNext, pTemp->pNext->nData);
                pTemp = pTemp->pNext;
        }
}

int main(void)
{
        pList plist;
        plist = CreateHeader();
        InsertEnd(&plist, 2);
        InsertEnd(&plist, 4);
        InsertEnd(&plist, 6);
        InsertEnd(&plist, 7);
        InsertEnd(&plist, 10);
        InsertEnd(&plist, 3);
        Print(&plist);
        system("cls");
        InsertAny(&plist, 5, 2);
        Print(&plist);

        system("pause");
        return 0;
}



古月不傲 发表于 2020-2-23 00:39
本帖最后由 古月不傲 于 2020-2-23 01:25 编辑

链表操作通过节点遍历找到下一个节点
所以s->next = A是不对的 这样是找不到的
s->next = p->next;
p->data = s->data;

这题目我都看的晕咯 就这样吧 管他对错了
luanshils 发表于 2020-2-23 01:30
你要弄明白头插法和尾插法,个人建议是画图
 楼主| ing 发表于 2020-2-23 14:41
luanshils 发表于 2020-2-23 01:30
你要弄明白头插法和尾插法,个人建议是画图

知道的,链栈只能头插法
luanshils 发表于 2020-2-26 08:31
ing 发表于 2020-2-23 14:41
知道的,链栈只能头插法

那确实,只能压栈
行星波动 发表于 2020-3-3 11:19
这个题的思路应该是在A后面插入X然后交换A,X的值。间接上实现头插。所以答案应该是A->next 和x.data
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表