题目:一个线性表(a1,a2,a3....,an)(n>3)采用带头结点的单链表L存储,设计一个算法求中间位置的元素(n为奇数时对应n/2的元素,n为偶数时对应(n+1)/2的元素)
分析:让p,q首先指向首结点,然后在p结点后面还存在两个结点的时候循环,p后移两个元素,q后移一个结点。当循环结束后,q指向的就是中间位置的结点
代码:
typedef struct LinkList {
int data;
struct LinkList* next;
}LinkList;
//求单链表中间位置的元素
int Midnode(LinkList* L) {
LinkList* p = L->next, * q = p;//让p,q指向首结点
while (p->next != NULL && p->next->next != NULL) {
p = p->next->next;
q = q->next;
}
return q->data;
}