标题:逐个输出单链表中的数据元素
取消只看楼主
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
结帖率:33.33%
已结贴  问题点数:10 回复次数:4 
逐个输出单链表中的数据元素
逐个输出单链表中的数据元素,,不知为何不能得到想要的,求帮助!!!!!!
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
} SLNode;
void ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
};
 int  ListInsert(SLNode *head,int i,int x)
{
    SLNode *p, *q;
    int j;
    p =head;
    j =-1;
     while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i-1)
    {
        printf("插入的位置参数有错\n");
    return 0;
    }
    q = (SLNode *)malloc(sizeof(SLNode));
    q->data =x;
    q->next = p->next;
    p->next =q;
    return 1;
};
int ListGet(SLNode *head,int i,int *x)
{
    SLNode *p;
    int j;
    p =head;
    j = -1;
    while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i)
    {
        printf("取元素的位置参数有错\n");
    return 0;
    }
    *x = p->data;
    return 1;
};
int main(int argc, char* argv[])
{
    SLNode *head;
    int x,i;
    ListInitiate(head);
    for(i=0;i<10;i++)
        ListInsert(head,i,i+1);
    for(i=0;i<10;i++)
    {
        ListGet(head,i,&x);
        printf("%d ",x);
    }
    printf("Hello World!\n");
    return 0;
}
编译通过,但是想不明白为什么得不到正确的结果,,,实验目的是为了逐个输出单链表中所有的数据元素
搜索更多相关主题的帖子: 元素 include next 
2012-09-21 22:47
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
不懂,问下,如何返回指针head的地址?在我打的程序中把void ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
};
中的void改为SLNode *ListInitiate(SLNode *head),并在后面补上return head也不行啊。无法返回指针head的地址,,
2012-09-22 16:55
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
更坑爹的是,我试过用指向指针的指针,如void ListInitiate(SLNode **head)
{
    *head = (SLNode *)malloc(sizeof(SLNode));
    (*head)->next = NULL;
};
在主函数中ListInitiate(&head);还是不行


2012-09-22 17:11
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
} SLNode;
SLNode *ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
    return head;
};
int  ListInsert(SLNode *head,int i,int x)
{
    SLNode *p, *q;
    int j;
    p =head;
    j =-1;
     while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i-1)
    {
        printf("插入的位置参数有错\n");
    return 0;
    }
    q = (SLNode *)malloc(sizeof(SLNode));
    q->data =x;
    q->next = p->next;
    p->next =q;
    return 1;
};
int ListGet(SLNode *head,int i,int *x)
{
    SLNode *p;
    int j;
    p =head;
    j = -1;
    while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i)
    {
        printf("取元素的位置参数有错\n");
    return 0;
    }
    *x = p->data;
    return 1;
};
int main(int argc, char* argv[])
{
    SLNode *head;
    int x,i;
    ListInitiate(head);
    for(i=0;i<10;i++)
        ListInsert(head,i,i+1);
    for(i=0;i<10;i++)
    {
        ListGet(head,i,&x);
        printf("%d ",x);
    }
    printf("Hello World!\n");
    return 0;
}还是说我的head没定义,我调试过了,确实,head开始的时候是有地址的,但后来就没有地址了
求解释
2012-09-22 19:13
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
GOOD JOB!主函数中定义一个SLNode* a,用来接收运行ListInitiate()后返回的值,再把后面ListGet(head,i,&x);
ListInsert(head,i,i+1);的head改为a,问题就引刃而解了(还有一点ListGet()中有一处错误,应改为while(p->next != NULL && j<i)谢谢你的提醒咯
2012-09-22 23:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381848-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.935803 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved