设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)

设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)

#include  
#include  
typedef int ElemType; 
typedef struct LNode
{  
	ElemType data;  
	struct LNode *next;  
	int Length; 
}LNode, *LinkList;
LinkList Create(); 
void print(LinkList L); 
int main() 
{  
	LinkList L = Create();  
	print(L);  
	return 0; 
} 
LinkList Create() 
{  
	LinkList L, p, s;  
	ElemType e;  
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;  
	p = L;  
	L->Length = 0;  
	scanf_s("%d", &e);  
	while (e != -1)  
	{   
		s = (LinkList)malloc(sizeof(LNode));   
		s->data = e;   
		p->next = s;   
		p = s;   
		scanf_s("%d", &e);
		L->Length++;  
	}  
	p->next = NULL;  
	return L; 
} 
void print(LinkList L)
{  
	LinkList p;  
	p = L->next;  
	if (L->Length % 2 == 1)  
	{   
		for (int i = 0; i < L->Length / 2; i++)
			p = p->next;   
		printf("%d", p->data);  
	}  
	if (L->Length % 2 == 0)  
	{   
		for (int i = 0; i < L->Length/ 2-1; i++)    
			p = p->next;   
		printf("%d %d", p->data,p->next->data);  
	} 
}

你可能感兴趣的:(设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1))