赞
踩
难度:中等
目录
这里直接采用的是LeetCode上面的问题描述。
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
下面给出示例:
提示:
sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
我们要想在链表中删除一个结点,目的就是要找到这个结点的前面一个节点(记为 left )。这里通过遍历链表 head 来计算链表的长度 ListSize ,然后通过 ListSize - n 来确定 结点 left 是链表中的第几个结点。通过 for循环遍历到 结点left 上,然后将要删除的结点的 next域 赋给 结点left的next域 即可。
1 <= n <= ListSize
,所以当 ListSize == 1 时,直接返回 NULL。- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode() : val(0), next(nullptr) {}
- * ListNode(int x) : val(x), next(nullptr) {}
- * ListNode(int x, ListNode *next) : val(x), next(next) {}
- * };
- */
- class Solution {
- public:
- ListNode* removeNthFromEnd(ListNode* head, int n) {
- int ListSize = 0;
- ListNode *p = head;
- while(p){
- p = p->next;
- ListSize++;
- }
- delete(p);
- if(ListSize < 2){
- return NULL;
- }
- if(ListSize == n){
- return head->next;
- }
- ListNode * ans = head;
- for(int i = 1;i < ListSize-n;i++){
- head = head->next;
- }
- head->next = head->next->next;
- return ans;
- }
- };
时间复杂度: ,n 为链表长度。
空间复杂度:
这题没有什么好说的,看清楚提示,注意细节,就可以了。
如果对你有什么帮助,请star ♥ 一下,收藏一下,蟹蟹啦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。