数据结构(C语言版)中的删除链表中的一个节点

来源:百度知道 编辑:UC知道 时间:2024/05/22 08:48:10
下面是老师发的作业,有谁能帮我做下啊~~要删除链表中的一个节点,在这个程序里面再编译一个程序,实现上述功能~~谢谢!!

****************************************************************
//---------------------------包含头文件

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h> //利用malloc动态分配内时要用到的头文件

//---------利用typedef定义数据类型------

typedef int DataType;

//int a;与DataType a;等价

//--------------定义结构体--------------

typedef struct Lnode
{

int a;
struct Lnode *next;

}Lnode,*LinkList;

//---------函数的声明-------------------

void create(LinkList *L); //创建链表

void ListInitiate(LinkList head,int count);
void ListInitiate1(LinkList head,int count);
void Print(LinkList head);
int ListLength(LinkList head);

//-------主函数部分----------------------
void main()
{
LinkList L;
int cou;
create(&L);
printf("请输入你要创建结点的个数:

temp=p;
p=p->next;
temp->next=NULL;
这三句存在问题,temp=p,让temp指向p所指向的节点,p=p->next,p指向后移
temp->next=NULL,让temp的后继为空,这里出了问题,链表从temp指向的节点断开,相当于删除p之后的所有节点。

应该先判断p是不是最后节点
if(p->next==NULL)
如果是,只好去找p的前趋pre,让pre->next=NULL,free(p)
如果不是最后节点,将p的后继节点数值域复制给p,然后将p的后继节点删除,等同与删除p
p->data=p->next->data;
p->next=p->next->next;
free(p);

//结点删除函数在最后

//---------------------------包含头文件

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h> //利用malloc动态分配内时要用到的头文件

//---------利用typedef定义数据类型------

typedef int DataType;

//int a;与DataType a;等价

//--------------定义结构体--------------

typedef struct Lnode
{

int a;
struct Lnode *next;

}Lnode,*LinkList;

//---------函数的声明-------------------

void create(LinkList *L); //创建链表

void ListInitia