2017-05-02
//插入新建节点
typedef struct Link{
int data;
struct Link *next;
}Node;
Node *createLinkList(int n)//创建新链表长度为n
{
int i, d;
Node *head=NULL, *p=NULL, *last=NULL;
for(i=0; i<n; i++)
{
printf("数据:");
scanf("%d", &d);
p = (Node *)malloc(sizeof(Node));
p->data=d;
p->next=NULL;
if(head==NULL)
head = p;
else{
last->next=p;
}
last=p;
}
return head;//返回头指针
}
//遍历链表
void traverse(Node *head)
{
Node *p=NULL;
p=head;//p 指向头节点
do{
printf("%-5d", p->data);
p=p->next;//p 指向下一个节点
}while(p!=NULL);
printf("\n");
}
//插入新建节点
void insert(Node *head, int n)
{
Node *q=NULL, *p=NULL;
int i, d;
printf("请输入新插入节点的数据:");
scanf("%d", &d);
p = (Node *)malloc(sizeof(Node));
p->data = d;
q=head;
for(i=1; i<n-1; i++)
{
q=q->next;
}
if(i==(n-1))
{
p->next = q->next;
q->next = p;
}
}
//驱动测试函数
void main()
{
int pos;
int n;
Node *head=NULL;
printf("链表长度:");
scanf("%d", &n);
head = createLinkList(n);
traverse(head);//遍历链表
printf("在链表中插入新的节点\n");
printf("请输入将要插入新节点的位置:");
scanf("%d", &pos);
insert(head, pos);
printf("遍历插入新建节点后的链表\n");
traverse(head);//遍历链表
}