19. 删除链表的倒数第 N 个结点(先后指针)
Posted Ston.V
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19. 删除链表的倒数第 N 个结点(先后指针)相关的知识,希望对你有一定的参考价值。
1.Description
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
2.Example
3.Code
使用暴力解法:选获得链表长度,再计算从正数应该删除第几个
先后指针解法:指针q在指针p的前n步,一起往前走,当q指向末尾,此时的p->next就是要被删除的
class Solution
public:
ListNode* removeNthFromEnd(ListNode* head, int n)
ListNode *dummyNode = new ListNode(-1);
dummyNode->next = head;
ListNode *p = dummyNode,*q = dummyNode;
for(int i=0;i<n;i++)
p = p->next;
while(p->next)
p=p->next;
q=q->next;
q->next = q->next->next;
return dummyNode->next;
;
4.注意
1.在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的 next 指针指向链表的头节点,这样一来,我们就不需要对头节点进行特殊的判断了。返回时,返回dummyNode->next即可。
2.注意删除节点时的内存释放,正式面试最后还是把delete和置为空指针写上
以上是关于19. 删除链表的倒数第 N 个结点(先后指针)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—19. 删除链表的倒数第 N 个结点