xch1111 2020-02-04 20:39 采纳率: 100%
浏览 961
已采纳

请问如何才能打印出单链表中的元素的值?

#include
#include
#include

typedef struct LNode{
int data;
struct LNode *next;//一个指向LNode类型结构的指针变量 (指针域)
}LNode,*LinkList;

//单链表初始化
int InitList_L(LinkList &L){
L = (LinkList)malloc( sizeof(LNode) );
L->next = NULL; //先建一个带头节点的单链表
printf("单链表初始化成功!\n");

return 0;

}

//头插法创建链表
int CreateList_L(LinkList &L,int n){
LinkList p;//起始位置
for(int i = n;i > 0;i--){
p = (LinkList)malloc( sizeof(LNode) ); //生成新结点
scanf("%d",p->data);
p->next = L->next;
L->next = p;
}
printf("创建成功!\n");

return 0;   

}

//查找第i个元素
int GetElem_L(LinkList &L,int i){
LinkList p;
p = L->next;
int j = 1;
int e;
while(p && j < i){
p = p->next;
j++;
}
if(!p || j > i){
printf("第%d个元素不存在\n",i);
}
e = p->data;
printf("查找元素为:%d\n",e);

return 0;

}

//第i个位置插入元素
int ListInsert_L(LinkList &L,int i,int e){
LinkList p = L;
LinkList s;
int j = 0;
while(p && j < i-1){
p = p->next;
j++;
}
if(!p || j > i-1){
printf("插入错误!\n");
}
s = (LinkList)malloc( sizeof(LNode) );
s->data = e;
s->next = p->next;
p->next = s;
printf("插入成功!\n");

return 0;

}

//删除第i个元素
int ListDelete_L(LinkList &L,int i){
LinkList p = L;
LinkList q;
int j = 0;
int e;
while( p->next && j < i-1 ){
p = p->next;
j++;
}
if( !(p->next) || j > i-1 ){
printf("删除错误!\n");
}

q = p->next;
p->next = q->next;
e = q->data;
printf("删除成功!\n");
free(q);

return 0;

}

//打印链表
int PrintList_L(LinkList &L){
LinkList p;
p = L->next;
if(p == NULL){
printf("这是一个空链表!\n");
}
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");

return 0;

}

int main(){
LinkList List;
int n;//链表元素个数
int i;//链表元素位置
int e;//链表插入的元素

printf("输入链表元素个数:");
scanf("%d",&n);

InitList_L(List);
printf("输入链表:\n");
CreateList_L(List,n);

printf("链表创建如下:\n");
PrintList_L(List);

printf("输入查找的位置:");
scanf("%d",&i);
GetElem_L(List,i);

printf("输入插入的位置和插入元素:");
scanf("%d %d",&i,&e);
ListInsert_L(List,i,e);
printf("新链表如下:\n");
PrintList_L(List);

printf("输入删除的位置:");
scanf("%d",&i);
ListDelete_L(List,i);
printf("新链表如下:\n");
PrintList_L(List);

return 0;

}
图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-04 21:03
    关注

    打印的不是地址,而是没有初始化的内存的内容
    scanf("%d",p->data);
    ->
    scanf("%d",&p->data);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀