链表的中间节点
这题需要用到快慢指针的思想,快指针叫fast,慢指针是slow,快指针每次往后移两个节点,slow只移动一个节点,这样子fast的速度是slow的两遍,当fast遍历完链表,slow才遍历一半,正好就在中间。
代码:
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode LSTNode;
struct ListNode* middleNode(struct ListNode* head) {LSTNode* slow,*fast;//定义两个指针fast=slow=head;//初始化指针while(fast&&fast->next)//fast走的快,它不能为空,并且它的next也不行{slow=slow->next;//slow每次往后移动一个节点fast=fast->next->next;//fast每次往后移动两个节点}return slow;//返回slow
}