插入与删除:先连后断

插入新结点 s:先连后面,再接前面 p 后一个 s ────→ ↗ ↘ ① s->next = p->next; ② p->next = s; 链表插入、删除不用像数组那样挪一大片,只要改几个 next: #include

开始练习 →

宿舍排队:3 号插到 2 号后面

宿舍门口按号排队:1 2 4 5。3 号来晚了,要插到 2 号后面,排好后应该是: 1 2 3 4 5 先运行,看画布上 p 停在了哪个结点;再改一个数,让 3 号插到正确的位置。 代码里以 @youci 开头的 printf 只负责运行后

开始练习 →

母题:有序链表插入新成绩

成绩链表已经从小到大排好。输入 n、n 个成绩和一个新成绩 x,把 x 插进去,链表仍然有序,再输出。例如输入: 3 60 75 90 80 输出: 60 75 80 90 插在中间、插在最后都没问题,可 x 比第一个还小时就插错了。补上「

开始练习 →

变式 1:选课名单里有人退课

选课名单按学号连成链表。输入 n、n 个学号和要退课的学号 x,删掉第一个等于 x 的结点(找不到就不动),输出名单;名单删空了输出 空。例如输入: 3 1003 1001 1007 1001 输出: 1003 1007 现在 x 正好排第

开始练习 →

变式 2:删掉所有不及格的成绩

输入 n 和 n 个成绩,删掉所有不及格(小于 60)的结点,输出剩下的;全删光了输出 空。例如输入: 4 58 70 40 66 输出: 70 66 开头连着几个不及格的已经处理好了,可中间连着两个不及格时,第二个漏删了。

开始练习 →

变式 3:按位置插入(插成第 k 个)

输入 n、n 个数,再输入 k 和 x,把 x 插进去,让它成为第 k 个结点(k 从 1 数,k 最大是 n+1,也就是插在最后),输出链表。例如输入: 3 5 6 7 2 9 输出: 5 9 6 7 现在找第 k-1 个结点、插在它后面

开始练习 →

变式 4:过号的排到队尾

食堂叫号,叫到 x 号时人不在,就把他排到队尾。输入 n、n 个号(保证有 x)和 x,输出调整后的队伍。例如输入: 4 11 12 13 14 12 输出: 11 13 14 12 程序已经把 x 从链表里摘下来了,可接着就 free 掉

开始练习 →

二级 · 程序填空:删除链表结点

函数 del 删除链表中第一个值为 x 的结点,返回新的头指针。程序输出 2 3。请在【】处填入正确的内容。 #include <stdio.h> #include <stdlib.h> struct node {

开始练习 →

二级 · 程序改错:头插法的叫号机

下面程序的功能是:依次输入 n 个号码,每个新号码都插到链表最前面(最新的先叫),最后输出整条链表。 例如输入 3 和 1 2 3,输出 3 2 1。 程序中有两处错误。请改正 found 下面一行中的错误,不要改动其他地方,也不要增删行。

开始练习 →

二级 · 程序设计:删除链表中所有的 x

请编写函数 fun:删除链表中所有值为 x 的结点(被删的结点要 free),返回新的头指针。 例如链表为 5 1 5 5 2、x 为 5 时,删完是 1 2;全删光了返回 NULL。 create、print_list、free_list

开始练习 →