中间结点定义
1->2->3->4 中间结点为3
1->2->3->4->5 中间结点为3
ListNode* middleNode(ListNode* head) {
ListNode* slow = head;
ListNode* fast = head;
while (fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
链表从中间断开
但有的题需要从链表中间结点断开
,例如1->2->3->4->NULL断开为1->2->NULL和3->4->NULL两条链表,此时我们需要找中间结点的前一结点
(2)。但链表节点数为奇数,则无区别。例如1->2->3->4->5->NULL断开为1->2->3->NULL和4->5->NULL
方法1:
ListNode* middleNode(ListNode* head) {
ListNode* slow = head;
ListNode* fast = head;
while (fast->next != NULL && fast->next->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
方法2:
当然也可以不修改while条件,而在while中先走fast,然后到尾就退出,此时slow少走一步
即为中间结点前一结点。
while(fast != nullptr && fast->next != nullptr) {
fast=fast->next->next;
if(fast == nullptr || fast->next == nullptr) brk = slow; //找到中间的位置 slow = slow->next;
}
brk->next = nullptr; // 将链表切开
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。