目录
1 力扣-移除链表元素
链接:力扣-链表的中间节点
1.1 示例
总结
-
链表奇数个,返回中间的
-
链表偶数个,返回中间的第二个
1.2 方法1
先遍历一次链表,保存节点总数 sum
如果一共 奇数 个节点
直接找到下标第 sum/2
个节点
如果一共 偶数 个节点
也是直接下标第 sum/2
个节点
不过这个方法需要2次遍历
如果想要只遍历1次
1.3 方法2
创建两个指针 fast
/ slow
,都存储头head
fast
一次跨越2个节点slow
一次跨越1个节点
当总数为奇数个
则当fast
访问到最后一个节点时, slow
保存的就是中间节点
而当总数为偶数个时:
当fast
为NULL
时,返回slow
1.4 实现
struct ListNode* middleNode(struct ListNode* head) { struct ListNode* fast, * slow; fast = head, slow = head; while (fast && fast->next) // fast和fast的next都不为NULL则执行 { fast = fast->next->next; slow = slow->next; } return slow; }