满意答案
我写的比较简单,如果还有不会的,依然可以问我。
#include
#include
#include
typedef struct ln
{
int data;
struct ln *next;
}point;
int main()
{
point *head, *p, *q, *r;
int a;
p = (point *)malloc(sizeof(point));///首先建立一个有4个节点的链表,便于插入操作
p->next = NULL;
p->data = 1;
head = p, q = p;
p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 5;
q->next = p, q = p;
p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 10;
q->next = p, q = p;
p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 15;
q->next = p, q = p;
printf("插入前的链表:\n");
p = head;
while(p)
{
printf("%-4d", p->data);
p = p->next;
}
printf("\n\n请输入一个大于1的元素:");
scanf("%d", &a);///比如输入9
p = head, q = head;
while(p)///找到要插入的位置,位置应该在q 和 p中间
{
if(p->data > a) break;
q = p;
p = p->next;
}
///while循环结束时,q指向的是5,q的next即p指向10
r = (point *)malloc(sizeof(point));///新节点
r->data = a;
r->next = NULL;
r->next = q->next;///新节点r的next指向q的next,即指向data为10的那个节点。其实这里用p比较容易理解
q->next = r;///然后q的next再指向r。这样就可以构成一个完整的链表
printf("插入后的链表为:\n");
p = head;
while(p)
{
printf("%-4d", p->data);
p = p->next;
}
}
02分享举报