/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
//思路
/*
这道题就是要把所有的case都想清楚。
1:如果node就是null,需要造一个新的node,并且自己和自己连上。
除去以上的case,我们需要在这个链表里找到需要插入的点的位置。我们遍历链表,并且进行不同case的分析。
2:如果node.val < node.next.val,那么如果x在这里两个值当中,我们就可以把x插进去。
3:如果node.val > node.next.val,这说明现在我们在链表的环的最后一个节点。那么如果x比整个链表中最大的节点值node.val还大,或者比整个链表中最小的节点值node.next.val还小,那么x可以插在这两个当中。
4:如果node.val == node.next.val,那么我们还是要判断一下node是不是就是环的最后一个节点,以及node.next是不是环的头。如果是这样,我们可以把x插进去。
*/
class Solution {
public:
    /**
     * @param node a list node in the list
     * @param x an integer
     * @return the inserted new list node
     */
    ListNode* insert(ListNode* node, int x) {
        // Write your code here
        ListNode* newNode = new ListNode(x);

        if (node == NULL) {
            newNode->next = newNode;
            return newNode;
        }

        ListNode* prev = NULL;
        ListNode* cur = node;

        do {
            prev = cur;
            cur = cur->next;

            if (x >= prev->val && x <= cur->val) {
                break;
            }

            if (prev->val > cur->val && (x <= cur->val || x >= prev->val)) {
                break;
            }
        } while (cur != node);

        prev->next = newNode;
        newNode->next = cur;

        return newNode;
    }
};

results matching ""

    No results matching ""