有没有大佬能帮我解决一下,为啥我的链表末尾插入的是一个垃圾值,不胜感激!!!
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>
//定义一个链表节点
typedef struct node
{
int data;
struct node * next;
} node,*pnode;
//创建一个单链表
pnode create_list(void)
{
int len;
int i;
int val;
pnode phead = (pnode)malloc(sizeof(node));
pnode ptail = phead;
ptail->next = NULL;
if(NULL == phead)
{
printf("内存分配失败,停止!!!\n");
exit(-1);
}
printf("请输入你要输入的节点个数:len = \n");
scanf("%d",&len);
for( i= 0;i<len;i++)
{
printf("请输入你要输入的%d节点值\n",i+1);
scanf("%d",&val);
pnode pnew = (pnode)malloc(sizeof(node));
if(NULL == pnew)
{
printf("内存分配失败,停止!!!\n");
exit(-1);
}
pnew->data = val;
ptail->next = pnew;
pnew->next = NULL;
ptail = pnew;
}
return phead;
}
//显示一个链表
void traverse_list( pnode phead)
{
pnode p = phead->next;
while(NULL != p)
{
printf("%d",p->data);
p = p->next;
}
printf("\n");
return;
}
//判断链表是否为空
int is_empty(pnode phead)
{
if(NULL == phead->next)
return 1;
else
return 0;
}
//求链表的长度
int length_list(pnode phead)
{
pnode p = phead->next;
int len = 0;
while(NULL != p)
{
len++;
p = p->next;
}
return len;
}
//给链表添加一个节点
bool insert_list(pnode phead,int pos,int val)
{
int i = 0;
pnode p = phead;
while((NULL != p)&&(i<pos-1))
{
p = p->next;
++i;
}
if((NULL == p)&&(i>pos-1))
return false;
pnode pnew = (pnode)malloc(sizeof(node));
if(NULL == pnew)
{
printf("内存分配失败\n");
exit(-1);
}
p->data = val;
pnode q = p->next;
p->next = pnew;
pnew->next = q;
return true;
}
/*int delete_list(pnode,int,int*)
{
}*/
//给链表排序
void sort_list(pnode phead)
{
int i,j,t;
int len = length_list(phead);
pnode p,q;
for(i = 0,p = phead->next;i<len-1;i++,p = p->next)
{
for(j = i+1,q = p->next;j<len;j++,q = q->next)
{
if(p->data>q->data)
{
t = p->data;
p->data = q->data;
q->data = t;
}
}
}
return;
}
int main(void)
{
pnode phead = NULL;
phead = create_list();
traverse_list(phead);
if(is_empty(phead))
printf("链表为空\n");
else
printf("链表非空\n");
printf("链表的长度为%d\n" ,length_list(phead));
sort_list(phead);
traverse_list(phead);
insert_list(phead,4,0);
traverse_list(phead);
return 0;
}
###insert_list
里,新值赋错地方了,修改见下:
- p->data = val;
+ pnew->data = val;
pnode q = p->next;
p->next = pnew;
pnew->next = q;
这样写更简单,少一行:
pnew->data = val;
pnew->next = p->next;
p->next = pnew;
运行良好,截图: