您的位置:首页 > 理论基础 > 数据结构算法

数据结构——快慢指针法查找链表中间值

2017-07-04 20:34 239 查看
/*
头插法创建链表
打印输出链表内容
利用快慢指针法找出链表中间元素
链表内容为奇数个时,打印中间值
链表内容为偶数个时,打印中间两个值
*/

#include<stdio.h>

typedef struct link
{
char data;
struct link *next;
}linklist;

/*头插法创建链表,注意头插法刚好是逆序*/
linklist *Create_List_Front()
{
linklist *head, *p;
char ch;
head = NULL;
printf("依次输入字符('#'表示结束):\n");
ch = getchar();
while (ch != '#')
{
p = (linklist*)malloc(sizeof(linklist));
p->data = ch;
p->next = head;
head = p;
ch = getchar();
}
return head;
}

/*打印输出链表内容*/
void link_print(linklist *L)
{
linklist *p;
p = L;

while (p != NULL)
{
printf("%c", p->data);
p = p->next;
}
}

int main()
{
linklist *fast, *low;

fast = low = Create_List_Front();
link_print(fast);

/*快慢指针原理,快指针一次遍历两个,
慢指针一次遍历一个,当快指针到达链表尾部时,
慢指针刚好指在链表中间值*/
while (fast->next != NULL)
{
if (fast->next->next != NULL)
{
fast = fast->next->next;
low = low->next;
}
else
{
fast = fast->next;
printf("\n%c", low->next->data);
}
}

printf("\n%c", low->data);

}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: