单链表删除第一个节点出现错误,不明白为什么。
新手刚学数据结构,写了一个删除链表节点的代码。其他都正常,但是删除第一个节点出现问题,不明白为什么。请大神给予解惑。感激不尽!下面是代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct listnode{
int data;
struct listnode *next;
};
//创建长度为n的单链表
struct listnode *create(int n)
{
int i;
int a;
struct listnode *p,*q,*head;
head = (struct listnode *)malloc(sizeof(struct listnode));
head = NULL;
for( i = 1; i <= n; i++ )
{
scanf("%d",&a);
p = (struct listnode *)malloc(sizeof(struct listnode));
p->data = a;
if(head == NULL)
{
head = p;
q = p;
}
else
{
q->next = p;
q = p;
}
}
q->next = NULL;
return head;
}
//打印单链表
void print_list(struct listnode *head)
{
while(head)
{
printf("%d ",head->data);
head = head->next;
}
}
//删除单链表的第i个节点
struct listnode *delete_list(struct listnode *head, int i)
{
int j = 0;
struct listnode *p;
p = head;
while(p && j < i-1)
{
p = p->next;
j++;
}
if( !p->next || j > i-1)
{
exit(1);
}
p->next = p->next->next;
return head;
}
int main()
{
int n;
int del;
struct listnode *head;
//head = NULL;
printf("输入链表的长度: ");
scanf("%d",&n);
head = create(n); // 创建长度为n的单链表
printf("\n输出单链表的值:\n");
print_list(head);
printf("\n输入要删除节点的位置:");
scanf("%d",&del);
head = delete_list(head,del);
printf("\n删除后的单链表为:\n");
print_list(head);
return 0;
}
[此贴子已经被作者于2015-11-20 21:15编辑过]