建立带有头结点的单链表、在单链表的第i个结点之前插入一个新的结点、删除第i个结点?

需要编写主函数,其他的主题都在这了#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList CreatListRH(void)
{
DataType ch;
Linklist head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("请输入链表各节点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(zeof(ListNoside));
s-> data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
int InserList(LinkList head,DataType x,int i)
{
ListNode *p,*s;
p=GetNode(head,i-1);
if(p==NULL)
{
printf("未找到第%d个节点",i-1);
return 0;
}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
int DeleteList(LinkList head,int i)
{
ListNode*p,*r;
p=GetNode(head,i-1);
if(p==NULL||p->next==NULL)
{
printf("未找到第%d个节点",i-1);
return 0;
}
r=p->next;
p->next=r->next;
free(r);
return 1;
}

注:源代码中节点数据只能是一个字符,

#include <stdio.h>

#include <stdlib.h>

typedef char DataType;

typedef struct node

{

int data;

struct node *next;

}ListNode;


typedef ListNode *LinkList;


LinkList CreatListRH(void)

{

DataType ch;

LinkList head;

ListNode *s,*r;

head=(ListNode *)malloc(sizeof(ListNode));

r=head;

printf("请输入链表各节点的数据:\n");

while((ch=getchar())!='\n')

{

s=(ListNode *)malloc(sizeof(ListNode));

s-> data=ch;

r->next=s;

r=s;

}

r->next=NULL;

return head;

}


LinkList GetNode(LinkList head,int i)

{

if(i < 0)

return NULL;

else

while(i)

{

head = head->next;

i--;

}

return head;

}


int InserList(LinkList head,DataType x,int i)

{

ListNode *p,*s;

p=GetNode(head,i-1);

if(p==NULL)

{

printf("未找到第%d个节点\n",i-1);

return 0;

}

s=(ListNode *)malloc(sizeof(ListNode));

s->data=x;

s->next=p->next;

p->next=s;

return 1;

}

int DeleteList(LinkList head,int i)

{

ListNode*p,*r;

p=GetNode(head,i-1);

if(p==NULL||p->next==NULL)

{

printf("未找到第%d个节点\n",i-1);

return 0;

}

r=p->next;

p->next=r->next;

free(r);

return 1;

}

void printList(LinkList head) 

{

printf("遍历输出链表为\n"); 

while(head->next != NULL)

{

head = head->next;

printf("%c ",head->data);

}

printf("\n"); 

}


void freeList(LinkList head)

{

LinkList p;

while(head != NULL)

{

p = head;

head = head->next;

free(p);

}

}

int main()

{

DataType x;

int i;

LinkList p = CreatListRH();

printList(p);

printf("输入要插入的值和位置\n");

scanf("%c %d",&x,&i);

if(InserList(p,x,i))

{

printf("插入成功,");

printList(p); 

}

printf("输入要删除的节点位置\n");

scanf("%d",&i);

if(DeleteList(p,i))

{

printf("删除成功,");

printList(p); 

}

freeList(p);

return 0;

}

温馨提示:答案为网友推荐,仅供参考
相似回答