关于leetcode:leetocode876链表的中间结点

两头结点定义

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;  // 将链表切开

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理