主页 > 互联网  > 

19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点

​题目来源:

        leetcode题目,网址:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

解题思路:

       使用双指针找到倒数第 N+1 个节点后删除链表的第 N 个节点即可。注意当 N 为链表长度时,倒数第 N+1 个节点不存在,head->next 即为所求。

解题代码:

/** * 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) { ListNode* lastNPlusOne=head; ListNode* lastOne=head; for(int i=0;i<n;i++){ lastOne=lastOne->next; } if(lastOne==nullptr){ return head->next; } while(lastOne->next!=nullptr){ lastNPlusOne=lastNPlusOne->next; lastOne=lastOne->next; } lastNPlusOne->next=lastNPlusOne->next->next; return head; } };

总结:

        官方题解新增了哑节点作为头节点以避免删除首个元素时的特殊判断。官方题解给出了三种解法。第一种是计算链表长度。两次遍历,第一次获得链表长度,第二次删除指定节点。第二种是栈,将所有元素入栈后,删去出栈时位于倒数第 N 个的节点。第三种是双指针。


标签:

19.删除链表的倒数第N个节点由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“19.删除链表的倒数第N个节点