19. Remove Nth Node From End of List
来源:互联网 发布:sql delete语句返回值 编辑:程序博客网 时间:2024/06/05 09:43
此道题目,我也只是遍历一次链表,但是因为使用了vector所以,空间复杂度为O(N),我的代码如下:
ListNode* removeNthFromEnd(ListNode* head, int n) { vector<ListNode *> pointers; // 存储指针 ListNode* tmp = head; while (tmp != NULL) { pointers.push_back(tmp); tmp = tmp->next; } if (pointers.size()-n == 0) { tmp = head->next; delete head; return tmp; } ListNode* pointer = pointers[pointers.size()-n-1]; tmp = pointer->next; pointer->next = pointer->next->next; delete tmp; return head; }
而事实上的经典解法是通过双指针,这时的空间复杂度为O(1)。我们设快慢两个指针,快指针先走n步,然后两个指针再同时向前走,当快指针走到链表的最后一个元素时,慢指针恰好走到要删除的元素的前一个元素。那么怎么理解这种解法呢,细心一思考便知,快指针先走n步后,到达链表的第n+1个元素,而快指针要到达最后一个元素的话,要再走Len-1-n步,Len为链表的长度。当慢指针向前走Len-n-1步时,到达链表的第Len-n个元素。其下一个元素为Len-n+1,恰好是从右边数第n个元素。代码如下:
ListNode* removeNthFromEnd(ListNode* head, int n) { if (head == NULL) { return NULL; } ListNode *fast = head, *slow = head, *tmp; // 快慢两个指针 for (int i=0; i<n; i++) { fast = fast->next; } if (fast == NULL) { tmp = head; head = head->next; delete tmp; return head; } while (fast->next != NULL) { fast = fast->next; slow = slow->next; } tmp = slow->next; slow->next = tmp->next; return head; }
0 0
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node from End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Idea中快捷自动补全
- 文章标题
- Android的v7包中的新控件——(一)RecyclerView(超级listview,传说会代替listview)
- iOS 键盘动画
- 索引原理
- 19. Remove Nth Node From End of List
- MyBatis动态Sql语句
- Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题
- BaiduMap---百度地图官方Demo之短串分享功能(介绍关键词查询,suggestion查询和查看餐饮类Place详情页功能)
- LDA主题模型学习笔记5:C源码理解
- sqlite不同数据库的表数据复制
- Tomcat服务器的一些配置
- 软件开发就是软件工程吗?
- NoSQL数据库概览及其与SQL语法的比较