C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
2016-05-30 17:16
603 查看
#include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SListNode { DataType data; struct SListNode* next; }SListNode; SListNode* BuyNode(DataType x) { SListNode* next = (SListNode*)malloc(sizeof(SListNode)); next->data = x; next->next = NULL; return next; } void PushBack(SListNode* & ppHead, DataType x) { if (ppHead == NULL) { ppHead = BuyNode(x); } else { SListNode* tail = ppHead; while (tail->next != NULL) { tail = tail->next; } tail->next = BuyNode(x); } } //查找单链表的中间节点,要求只能遍历一次 SListNode* FindMiddle(SListNode* ppHead) { SListNode* slow = ppHead; SListNode* fast = ppHead; while (fast) { fast = fast->next; if (fast != NULL) { slow = slow->next; fast = fast->next; } else { return slow; } } return slow; } void PrintSNodeList(SListNode* ppHead) { while (ppHead) { printf("%d->", ppHead->data); ppHead = ppHead->next; } printf("\n"); } void Test3() { SListNode* List = NULL; PushBack(List, 1); PushBack(List, 2); PushBack(List, 3); PushBack(List, 4); PushBack(List, 5); PrintSNodeList(List); SListNode *ret=FindMiddle(List); printf("%d ", ret->data); } int main() { Test3(); system("pause"); return 0; }
相关文章推荐
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- C++:复数类构造函数、拷贝构造、运算符重载、析构函数
- C++【面试题】:类实现万年历(日期计算器),(含构造函数、拷贝构造、运算符重载、析构函数)
- C语言【顺序表】冒泡排序,一次选出最大最小的数据,二分查找,初始化顺序表
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- C++:【常见面试题】String类的写法
- C++【String类】String查找单个字符,查找字符串的函数实现
- C++【String类】String删除单个字符,删除字符串的函数实现
- C++【String类】String插入单个字符,插入字符串的函数实现
- C++【String类】String头插单个字符,头删单个字符的函数实现
- C++【常见面试题】String类的实现,以及深拷贝、浅拷贝问题
- 【笔试常考】C语言:深度剖析strlen,sizeof
- 【C语言】注释不可以嵌套使用的举例
- 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别
- C/C++(&Java) Volatile关键词深度剖析
- C语言;在终端输入多行信息,找出包含“ould”的行,并打印改行。
- C语言:模拟实现printf,要求功能:print(&quot;ccc\ts!&quot;,&#39;b&#39;,&#39;i&#39;,&#39;t&#39;,&quot;welcome to you&quot;);
- 【C语言】编写冒泡排序,排序一个整形数组。
- 【C语言】reverse_str递归调用函数
- C语言:使用冒泡排序,排序多个字符串(优化)。