建立单链表,在单链表的第i个元素前插入x
请写出完整程序。main函数只完成调用功能
#include<stdio.h>
#include<stdlib.h>
typedef char Elemtype;//链表元素类型
typedef struct lnode
{
Elemtype data;
struct lnode *next;
}lnode,*linklist;//链表节点类型和节点指针类型
void createlist(linklist &L)//创建链表,L为表头
{
L=(linklist)malloc(sizeof(lnode));
L->data='#'; L->next=NULL;
linklist q=L;Elemtype c;
do
{
scanf("%c",&c);
if(c!='#')
{
linklist p=(linklist)malloc(sizeof(lnode));
p->data=c;
q->next=p;
q=p;
}
else q->next=NULL;
}while(c!='#');//#为输入结束标识
}
void insertposition(linklist &L,int i,Elemtype x)//插入指定的位置之前
{
linklist p=L;linklist q;
for(int k=0;k<i;k++)
{
q=p;p=p->next;
}
linklist e=(linklist)malloc(sizeof(lnode));
e->data=x;
e->next=p;q->next=e;
}
void printlinklist(linklist L)//打印链表
{
linklist p;
p=L->next;
while(p)
{
printf("%2c",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
linklist L;int i; char x;
printf("依次输入链表元素,#结束:\n");
createlist(L);
printf("创建的链表为:\n");
printlinklist(L);
printf("输入要在第几个元素前插入:\n");
scanf("%d",&i);
getchar();
printf("输入要插入的节点值:\n");
scanf("%c",&x);
getchar();
printf("在第%d个节点前插入节点%c:\n",i,x);
insertposition(L,i,x);
printlinklist(L);
}
//例如输入abcde# 再按提示输入就行了
#include<stdlib.h>
typedef char Elemtype;//链表元素类型
typedef struct lnode
{
Elemtype data;
struct lnode *next;
}lnode,*linklist;//链表节点类型和节点指针类型
void createlist(linklist &L)//创建链表,L为表头
{
L=(linklist)malloc(sizeof(lnode));
L->data='#'; L->next=NULL;
linklist q=L;Elemtype c;
do
{
scanf("%c",&c);
if(c!='#')
{
linklist p=(linklist)malloc(sizeof(lnode));
p->data=c;
q->next=p;
q=p;
}
else q->next=NULL;
}while(c!='#');//#为输入结束标识
}
void insertposition(linklist &L,int i,Elemtype x)//插入指定的位置之前
{
linklist p=L;linklist q;
for(int k=0;k<i;k++)
{
q=p;p=p->next;
}
linklist e=(linklist)malloc(sizeof(lnode));
e->data=x;
e->next=p;q->next=e;
}
void printlinklist(linklist L)//打印链表
{
linklist p;
p=L->next;
while(p)
{
printf("%2c",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
linklist L;int i; char x;
printf("依次输入链表元素,#结束:\n");
createlist(L);
printf("创建的链表为:\n");
printlinklist(L);
printf("输入要在第几个元素前插入:\n");
scanf("%d",&i);
getchar();
printf("输入要插入的节点值:\n");
scanf("%c",&x);
getchar();
printf("在第%d个节点前插入节点%c:\n",i,x);
insertposition(L,i,x);
printlinklist(L);
}
//例如输入abcde# 再按提示输入就行了
温馨提示:答案为网友推荐,仅供参考
第1个回答 2007-12-28
node * p = head;
node * q = head;
node * s = NULL;
for (int n=0; n<i-1; n++)
{
p = p->next;//让p指向第i-1个结点
}
q = p;//q指向第i-1个结点
p = p->next;//p指向第i个结点
s = new node;//s指向新建结点
s->data = x;//s的数据赋值为x
s->next = q->next;//让s的链指向p
q->next = s;//让q的链指向s,插入结点完成
node * q = head;
node * s = NULL;
for (int n=0; n<i-1; n++)
{
p = p->next;//让p指向第i-1个结点
}
q = p;//q指向第i-1个结点
p = p->next;//p指向第i个结点
s = new node;//s指向新建结点
s->data = x;//s的数据赋值为x
s->next = q->next;//让s的链指向p
q->next = s;//让q的链指向s,插入结点完成