链表
为成大道踏平坎坷
这个作者很懒,什么都没留下…
展开
-
LeetCode82 删除链表重复节点2
哑结点+非递归 class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode dummyhead(-101, head); ListNode* cur = &dummyhead; while (cur->next != NULL && cur->next->next != NULL) { if (cur->next->val == cur-原创 2021-08-13 13:04:43 · 96 阅读 · 0 评论 -
LeetCode83 删除链表重复节点
创建两个节点保存前驱和当前节点,不断比较中向后移动,若相等前驱直接连到后继上,就完成了删除操作。若不相等,则同时后移。 class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode dummyhead(999, head); ListNode* cur = head; ListNode* curPre = &dummyhead; while (cur != NULL) { if (原创 2021-08-13 13:03:55 · 102 阅读 · 0 评论 -
LeetCode148 排序链表
方法一 选择排序 时间复杂度O(N^2)空间复杂度O(1) 超时。。。 class Solution { public: ListNode* sortList(ListNode* head) { ListNode* tail = NULL; ListNode* cur = head; ListNode* smallPre = NULL; ListNode* small = NULL; while (cur != NULL) { small = cur; smallPre =原创 2021-08-13 13:02:59 · 72 阅读 · 0 评论 -
LeetCode143重排链表
方法一找到中间后,右半区压入栈中,然后将两部分合并 class Solution { public: void reorderList(ListNode* head) { ListNode* fast = head; ListNode* slow = head; ListNode* mid; stack<ListNode*> st; while (fast->next != NULL &&原创 2021-08-13 13:02:15 · 101 阅读 · 0 评论 -
LeetCode19 删除倒数k个节点
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* slow=head; ListNode* fast=head; // if(head->next==NULL){ // if(n==1){ // return NULL; // } // } // if(head->nex原创 2021-08-13 13:01:27 · 110 阅读 · 0 评论 -
程序员面试指南 删除链表中间节点c++
牛客上 题目给出的要比书上的简单,牛客上求的是删除第k个节点,所以只需要找到第k-1个即可。先写牛客上的内容 list_node * remove_kth_node(list_node * head, int K) { //////在下面完成代码 list_node* cur=head; list_node* pre=head; if(K==1){ return head->next; } while(--K){ p原创 2021-08-13 12:49:50 · 138 阅读 · 0 评论 -
LeetCode160相交链表
class Solution { public: ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) { stack<ListNode*>stA; stack<ListNode*>stB; if (headA == NULL || headB == NULL) { return NULL; } while (headA) { stA.push(headA); headA原创 2021-07-15 22:44:44 · 106 阅读 · 0 评论 -
LeetCode21合并两个有序链表
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* newhead = NULL; ListNode* cur = NULL; while (l1 != NULL && l2 != NULL) { if (l1->val <= l2->val) { newhead = newhead == NULL ? l1 : newh原创 2021-07-15 22:42:10 · 77 阅读 · 0 评论 -
LeetCode25 k个一组链表反转
class Solution { public: ListNode* popstack(stack<ListNode*>& st, ListNode* left, ListNode* right) { if (left != NULL) { left->next = st.top(); } ListNode* ccc = st.top(); st.pop(); ListNode* next = NULL; while (!st.empty()) {原创 2021-07-15 22:40:37 · 105 阅读 · 1 评论 -
LeetCode92反转部分链表
class Solution { public: ListNode* reverseBetween(ListNode* head, int left, int right) { int len=right-left+1; ListNode* pre_head=nullptr; ListNode* result=head; while(head&&--left){ pre_head=head;原创 2021-07-15 22:39:14 · 365 阅读 · 1 评论 -
LeetCode206反转链表
反转单向链表 单向链表的节点只有一个指针指向下一个元素。 struct ListNode{ int val; ListNode* next; }; ListNode* reverseList(ListNode* head){ ListNode* newhead=nullptr; while(head){ ListNode* next=head->next; head->next=newhead; newhead=head原创 2021-07-15 22:37:29 · 73 阅读 · 0 评论