单链表创建

962098440 2017-10-18 11:26:28
#include <iostream>
using namespace std;

typedef struct node
{
int data;
node *next;
}NODE,*PNODE;

PNODE create();
void traverse(PNODE phead);
int main()
{
PNODE phead=NULL;
phead=create();
traverse(phead);
return 0;
}
PNODE create()
{
int len;
cout<<"输入链表节点个数: ";
cin>>len;
int x;
PNODE phead=new NODE;
if(NULL==phead)
cout<<"分配失败!"<<endl;
PNODE ptemp=phead;
ptemp->next=NULL;
while(len--)
{
PNODE pnew=new NODE;
cout<<"输入节点数据: ";
cin>>x;
pnew->data=x;
ptemp->next=pnew;
pnew->next=NULL;
ptemp=pnew;
}

return phead;
}

void traverse(PNODE phead)
{
PNODE p=phead;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
return;
}

各位大神帮忙看看为啥有错,运行出来总有一个随机数
...全文
254 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
962098440 2017-10-19
  • 打赏
  • 举报
回复
多谢了
962098440 2017-10-19
  • 打赏
  • 举报
回复
多谢各位了,我已经清楚了
赵4老师 2017-10-19
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
自信男孩 2017-10-19
  • 打赏
  • 举报
回复
楼主创建的链表是带哨兵的链表,由于第一个是哨兵节点,并且没有对哨兵节点的data赋值,所以是随机值; 只需要在输出的时候注意下,不输出哨兵节点的data即可。
#include <iostream>

using namespace std;

typedef struct node
{
    int data;
    node *next;
}NODE, *PNODE;

PNODE create();
void traverse(PNODE phead);
int main()
{
    PNODE phead=NULL;
    phead = create();
    traverse(phead);
    return 0;
}
PNODE create()
{
    int len;
    cout<<"输入链表节点个数: ";
    cin>>len;
    int x;
    PNODE phead = new NODE;
    if(!phead)
        cout<<"分配失败!"<<endl;

    PNODE ptemp = phead;
    ptemp->next = NULL;
    while(len--)
    {
        PNODE pnew = new NODE;
        cout<<"输入节点数据: ";
        cin>>x;
        pnew->data = x;
        pnew->next = NULL;
        ptemp->next = pnew;
        ptemp = pnew;
    }

    return phead;
}

void traverse(PNODE phead)
{
    PNODE p = phead->next;   /*哨兵节点不需要输出*/
    while(p)
    {
        cout<<p->data<<"  ";
        p = p->next;
    }
    return;
}
创建函数不做修改,只需要在输出函数里微调即可。 上面的程序参考一下吧
abc_18217053753 2017-10-18
  • 打赏
  • 举报
回复
PNODE create() { int len; cout<<"输入链表节点个数: "; cin>>len; int x; PNODE phead=new NODE; if(NULL==phead) cout<<"分配失败!"<<endl; PNODE ptemp=phead; // 从你的程序来看你创建的是带头节点的单链表,这里的的这个头节点你并没有输入数据,但是你在输出函数中输出时数据的个数会比你输入的节点数量多一个,且每次第一个值都是随机的(因为你在输出时将没有赋值的头 节点也输出了) ptemp->next=NULL; while(len--) { PNODE pnew=new NODE; cout<<"输入节点数据: "; cin>>x; pnew->data=x; ptemp->next=pnew; pnew->next=NULL; ptemp=pnew; } return phead; } void traverse(PNODE phead) { PNODE p=phead; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } return; } 你的创建链表和输出的函数有冲突的地方,具体的解释见程序后面的中文备注,谢谢~

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧