查找链表中的中间节点
2014-09-01 10:56
309 查看
题目:输入一个单链表,打印出链表的中间元素,注意时间效率。
算法思想:用快慢指针,设置两个指针fast和slow,两个指针同时开始从头遍历,fast指针每次的步长为2,slow的步长为1,这样,当fast指针遍历到链表末端,slow指针刚好指向链表的中间位置。
代码:
typedef struct node
{
int value;
struct node* next;
}node_t;
node_t* getTheMiddleNode(node_t* head)
{
if(head == NULL)
return NULL;
node_t* fast_ptr = head;
node_t* slow_ptr = head;
while((slow_ptr != NULL) && (fast_ptr != NULL) && (fast_ptr->next != NULL))
{
slow_ptr = slow_ptr->next;
fast_ptr = fast_ptr->next->next;
}
return slow_ptr;
}
算法思想:用快慢指针,设置两个指针fast和slow,两个指针同时开始从头遍历,fast指针每次的步长为2,slow的步长为1,这样,当fast指针遍历到链表末端,slow指针刚好指向链表的中间位置。
代码:
typedef struct node
{
int value;
struct node* next;
}node_t;
node_t* getTheMiddleNode(node_t* head)
{
if(head == NULL)
return NULL;
node_t* fast_ptr = head;
node_t* slow_ptr = head;
while((slow_ptr != NULL) && (fast_ptr != NULL) && (fast_ptr->next != NULL))
{
slow_ptr = slow_ptr->next;
fast_ptr = fast_ptr->next->next;
}
return slow_ptr;
}
相关文章推荐
- C++ 算法之 查找链表中间节点
- 单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点
- [LeetCode-234] Palindrome Linked List(回文链表、链表中间节点查找)
- 查找链表的中间节点
- 数据结构——4 单链表查找中间节点
- 链表面试题之快慢指针问题(一) 查找链表中间节点
- 单链表 --- 查找链表中间节点,仅一次遍历
- 查找链表中间节点
- 查找单链表的中间节点,要求只能遍历一次链表
- C语言数据结构之如何快速查找链表的中间节点
- C++算法之 查找链表中间节点
- 数据结构之链表面试题汇总(一)--查找单向链表的中间节点、倒数第K个节点
- 链表(6)----查找链表中间节点
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
- 链表面试题(二):冒泡排序、合并两个有序链表、查找中间节点、查找倒数K个节点
- 查找链表的中间节点
- 查找单链表的中间节点,要求只能遍历一次链表
- Java实现查找链表的中间节点,(在未知链表长度的情况下)
- 查找单链表的中间节点,要求只能遍历一次链表
- 查找单链表的中间节点,要求只能遍历一次链表(C语言)