鱼C论坛

 找回密码
 立即注册
查看: 1520|回复: 4

[已解决]#新手求助#关于使用new的问题

[复制链接]
发表于 2018-9-7 16:09:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
node* createFromLast()
{
        node *p_old = NULL;
        node *p_new = NULL;
        int n;
        
        cin >> n;
        node *last = new node;
        last->value = n;
        last->next = NULL;

        p_old = last;
        while (cin >> n)   
        {
                [b]p_new = new node;[/b]
                p_new->value = n;  
                p_new->next = p_old;  
                p_old = p_new;  
        }
        return p_new;
}

这是一个用尾插法创建列表的一个方法,关于p_new有点问题;
p_new是一个指向结构体的指针,声明并初始化为NULL, 如果在while循环里不用new会出现什么问题,为什么
最佳答案
2018-9-7 18:39:26
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是死循环吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 18:39:26 | 显示全部楼层    本楼为最佳答案   
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是死循环吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 22:08:49 | 显示全部楼层
claws0n 发表于 2018-9-7 18:39
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是 ...

while循环输入0就可以跳出了,或者ctrl+z然后回车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 22:24:00 | 显示全部楼层
claws0n 发表于 2018-9-7 18:39
p_new 是新的节点。透过 new 申请新的空间来放新的资料。
没有就没有空间存储新的数据……
你的 while 是 ...
// 尾插法
node* createFromLast()
{
        node *p_old = NULL;
        node *p_new = NULL;
        int n;
        
        cin >> n;
        node *last = new node;
        last->value = n;
        last->next = NULL;

        p_old = last;
        while (cin >> n)   
        {
                [b]p_new = new node;[/b]
                p_new->value = n;  
                p_new->next = p_old;  
                p_old = p_new;  
        }
        return p_new;
}

// 头插法
node *createFromHead()
{
        node *p_old = NULL;
        node *p_new = NULL;
        node *head = new node;
        
        int n;
        cin >> n;
        head->value = n;
        p_old = head;
        while (cin >> n)
        {
                p_new = new node;
                p_new->value = n;
                p_old->next = p_new;
                p_old = p_new;
        }
        return head;
}

// 打印链表
void printList(node *head)
{
        if (head == NULL)
        {
                cout << "链表为空!" << endl;
        }
        else
        {
                while (head)
                {
                        cout << setw(4) << head->value;   // 引发了异常: 读取访问权限冲突。
**head** 是 0xCDCDCDCD。
                        head = head->next;
                }
                cout << endl;
        }
}

int main()
{
        cout << "请输入链表数据:" << endl;
        //node *test = createFromLast();
        node *test = createFromHead();
        cout << "创建链表完毕:" << endl;
        printList(test);

        system("pause");
        return 0;
}

你好,不好意思,又有问题要麻烦你了,
关于打印链表的:
1. 尾插法打印一切正常;
2.头插法打印可以打印完整,但程序会出错,错误如注释所示;
em......求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 23:11:22 | 显示全部楼层
Eakim 发表于 2018-9-7 22:24
你好,不好意思,又有问题要麻烦你了,
关于打印链表的:
1. 尾插法打印一切正常;

还没上机,应该只有输出一个,然后报错吧?
你的链表不是链表,断开了。
尾插法没有维护尾指针;头插法的尾巴不见了,没有维护头指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-2 12:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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