203. 移除链表元素
203. 移除链表元素 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 class Solution {public : ListNode* removeElements (ListNode* head, int val) { ListNode dummyNode = ListNode (0 ); dummyNode.next = head; ListNode* prev = &dummyNode; ListNode* curr = prev->next; while (curr != nullptr ) { if (curr->val == val) { prev->next = curr->next; } else { prev = curr; } curr = curr->next; } return dummyNode.next; } };
时间复杂度:O(n)
空间复杂度:O(1)
707. 设计链表
707. 设计链表 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 class MyLinkedList {private : ListNode* head; size_t size; public : MyLinkedList () : head{nullptr }, size{} {} int get (int index) { if (index < 0 || index >= size) { return -1 ; } ListNode* node = head; while (index != 0 ) { node = node->next; --index; } return node->val; } void addAtHead (int val) { ListNode* node = new ListNode (val); node->next = head; head = node; ++size; } void addAtTail (int val) { ListNode* node = new ListNode (val); if (size == 0 ) { head = node; } else { ListNode* prev = head; while (prev->next != nullptr ) { prev = prev->next; } prev->next = node; } ++size; } void addAtIndex (int index, int val) { if (index < 0 || index > size) { return ; } if (index == 0 ) { return addAtHead (val); } if (index == size) { return addAtTail (val); } ListNode* node = new ListNode (val); ListNode* prev = head; while (index != 1 ) { prev = prev->next; --index; } node->next = prev->next; prev->next = node; ++size; } void deleteAtIndex (int index) { if (index < 0 || index >= size) { return ; } if (index == 0 ) { head = head->next; } else { ListNode* prev = head; ListNode* curr = prev->next; while (index != 1 ) { prev = curr; curr = curr->next; --index; } prev->next = curr->next; } --size; } };
206. 反转链表
206. 反转链表 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Solution {public : ListNode* reverseList (ListNode* head) { ListNode* prev{}; ListNode* curr{head}; while (curr != nullptr ) { ListNode* temp{curr->next}; curr->next = prev; prev = curr; curr = temp; } return prev; } };
时间复杂度: O(n)
空间复杂度: O(1)