首页 > 代码库 > leetcode-26-exercise_linked-list

leetcode-26-exercise_linked-list

141. Linked List Cycle

Given a linked list, determine if it has a cycle in it.

解题思路:

需要检查before和after隔一个的情况。因为除了开始时,如果检查的是before和after相邻,那么两个元素成环时,after跑到before后面,也就

不能检查到环了。

bool hasCycle(ListNode *head) {
        if (head == NULL)
            return false;
        ListNode* before = head;
        ListNode* after = before->next;
        while (after != NULL && after->next != NULL) {
            if (after == before)
                return true;
            before = before->next;
            after = after->next->next;
        }
        return false;
    }  

21. Merge Two Sorted Lists

按升序合并两个链表

解题思路:

当l1和l2不空时,比较它们的表头值,放入小的,同时移动指针。当有一个链表为空时,剩下的那个必然是更大的部分,直接连接上就好。

最后,由于初始化时给了一个表头,所以要返回表头下一个点。

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* result = new ListNode(0);
        ListNode* temp = result;
        while (l1 != NULL && l2 != NULL) {
            if (l1->val < l2->val) {
                temp->next = l1;
                l1 = l1->next;
            } else {
                temp->next = l2;
                l2 = l2->next;
            }
            temp = temp->next;
        }
        if (l1 != NULL)
            temp->next = l1;
        else
            temp->next = l2;
        return result->next;
    } 

 

leetcode-26-exercise_linked-list