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

来源:互联网 发布:linux 777 什么权限 编辑:程序博客网 时间:2024/05/16 16:25
/*  头插法创建链表  打印输出链表内容  利用快慢指针法找出链表中间元素  链表内容为奇数个时,打印中间值  链表内容为偶数个时,打印中间两个值*/#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);}

阅读全文
2 0