函数接口定义中,ElemSet 是用户定义的数据类型,例如 int、double 或者 char 等。函数 Find 的功能是,返回带空头结点的单链表 list 的倒数第 m 个元素的值,并且不得对 list 做任何改变。如果这样的元素不存在,则返回一个错误标志 ERROR(这个标志的值由裁判程序定义)。
List ReadList() { /* 创建带空头结点的、有n个数据结点的单链表 */ List p, rear; int n; scanf("%d", &n); p = (List)malloc(sizeof(struct ListNode)); p->next = NULL; rear = p; while (n--) { /* 新读入的数据插在链表尾 */ rear->next = (List)malloc(sizeof(struct ListNode)); scanf("%d", &rear->next->data); rear->next->next = NULL; rear = rear->next; } return p; }
voidPrintList( List list ) { /* 顺序输出带空头结点的单链表的结点数据 */ while (list->next != NULL) { list = list->next; printf("%d ", list->data); } printf("\n"); }
ElemSet Find( List list, int m );
intmain(void) { List list; int m; list = ReadList(); scanf("%d", &m); printf("%d\n", Find(list, m)); PrintList(list); return0; } /* 你的代码将被嵌在这里 */
输入样例:
5 1 2 4 5 6 3
输出样例:
4 1 2 4 5 6
解析
ElemSet Find( List list, int m ) { Position p = list; Position q = list; int i = 0; for (i = 0; i < m; i++) { p = p->next; if (p == NULL) { return ERROR; } } int j = 0; for (; p != NULL; p = p->next) { q = q->next; } return q->data; }