题目形容
给定带头结点的单链表L,假如L存储了n个元素(n为奇数,是未知的)。设计算法返回该链表两头的那个元素。要求仅对链表进行一次遍历。
输出
输出N个数字,不必关怀N是多少,应用while循环读入链表中元素,直至EOF。(0<N≤1e5)
输入
输入链表最两头的元素。
样例输出
1 2 3 4 5
样例输入
3
解题思路
用一个全局变量count统计链表元素的个数,中位数的位序=(count+1)/2。
C++参考解答
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode { ElemType data; struct LNode* next;}LNode,*LinkList;int count = 0;//尾插法LinkList CreateList(LinkList& L) { L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; LinkList s, r = L; int x; while (scanf("%d",&x)!=EOF){ s = (LinkList)malloc(sizeof(LNode)); s->data = x; s->next = r->next; r->next = s; r = s; count++; } r->next = NULL; return L;}//输入链表中位数void ListMedian(LinkList L,int n) { LinkList p = L->next; int pos = (n + 1) / 2; int i = 1; while (i < pos) { p = p->next; i++; } printf("%d", p->data);}int main() { LinkList L; CreateList(L); //PrintList(L); ListMedian(L, count);}