上接—>《链表的创建(形成链表)》
该部分为形成链表之后,再向已形成链表追加数据
插入方式有很多
以下为其中一种:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node{
int data;
struct node *next;
}LNode,*LinkList;
LinkList GreatLinkList(int n) { /*形成长度为n的链表*/
LinkList p, q, listTop = NULL;
int i;
printf("请为链表输入值:\n");
for (i = 1; i <= n; i++) {
p = (LinkList)malloc(sizeof(LNode));
if (p == NULL) exit(0);
scanf("%d", &p->data);
p->next = NULL;
if (listTop == NULL)listTop = p;
else q->next = p;
q = p;
}
return listTop;
}
void addLinkList(LinkList list, LinkList q) {
/*ListTop为待插入链表头指针,向p指出的结点后面插入新结点*/
LinkList p;/*形成一个新的结点指针*/
p = (LinkList)malloc(sizeof(LNode));/*生成新结点*/
printf("要追加的新数据:");
scanf("%d", &p->data);
if (list == NULL) {/*要追加的链表为空表*/
list = p;
list->next = NULL;
}
else { /*在要插入位置进行操作*/
p->next = q->next;
q->next = p;
}
}
LinkList FindLinkList(LinkList list) {
/*返回要插入位置*/
int x;
if (list == NULL) exit(0);/*空表*/
LinkList p;
p = list;
printf("选择追加数据的位置:");
scanf("%d", &x);
while (p)
{
if (p->data == x) return p;
p = p->next;
}
return NULL;
}
void PrintfList(LinkList list) {
LinkList p;
p = list;
printf("当前链表内容:\n");
while (p)
{
printf("%d\n", p->data);
p = p->next;
}
}
int main() {
int n;
LinkList list;
LinkList addList_q;
printf("要形成的链表长度:");
scanf("%d", &n);
list = GreatLinkList(n);
PrintfList(list);
addList_q = FindLinkList(list);
addLinkList(list, addList_q);
PrintfList(list);
return 0;
}