建立带有头结点的单链表、在单链表的第i个结点之前插入一个新的结点、删除第i个结点?
#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;
}