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; }