单向链表③

Irene ·
更新时间:2024-11-15
· 951 次阅读

编程实现:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个正整数 n(0<n<=9)和一组(n个)升序的整数,建立单向链表,再输入一个整数 x,把 x 插入到这组数据中,使该组数据仍然有序。
输入:
4 (repeat=4)
5 (数据的个数n=5)
1 2 4 5 7 (5个有序整数)
3 (待插入整数x=3)
4 (数据的个数n=4)
1 2 5 7 (4个有序整数)
-10 (待插入整数x=-10)
3 (数据的个数n=3)
1 2 4 (3个有序整数)
100 (待插入整数x=100)
5 (数据的个数n=5)
1 2 4 5 7 (5个有序整数)
4 (待插入整数x=4)

输出:
size=6:1 2 3 4 5 7
size=5:-10 1 2 5 7
size=4:1 2 4 100
size=6:1 2 4 4 5 7

# include # include typedef struct biao * list; struct biao{ int data; struct biao * next; }; list create666(int n){ list head = NULL,p = NULL,tail=NULL; for(int i=1;idata); p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; } return head; } void add_print(list head,int n){ list p1=NULL,p2=NULL,w=NULL,p3=NULL; int x; scanf("%d",&x); w=(list)malloc(sizeof(struct biao)); //容易忘的 w->data=x; w->next=NULL; p1=head; if(p1->data>=w->data){ //w为头结点 w->next=p1; head=w; } p2=p1->next; while(p2){ if(p2->data>=x&&p1->datanext=w; //注意顺序 把w赋给p1->next 反过来运行超时 w->next=p2; //注意顺序 p2赋给w->next 反过来错误 break; } p1=p1->next; p2=p1->next; } if(p1->datanext=w; //尾结点 注意顺序 w赋给p1->next 反过来错误 p3=head; if(p3!=NULL){ printf("size=%d:",n+1); while(p3->next!=NULL){ printf("%d ",p3->data); p3=p3->next; } printf("%d\n",p3->data); } } int main (){ int repeat; scanf("%d",&repeat); for(int i=1;i<=repeat;i++){ int n; scanf("%d",&n); list head=create666(n); add_print(head,n); } return 0; }
作者:霜雪i



单向链表 链表

需要 登录 后方可回复, 如果你还没有账号请 注册新账号