删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com)

/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
ListNode* res = new ListNode(0); //新建头节点
res->next = head; //连接
ListNode* pre = res; //处理指针
ListNode* fast = head, * slow = head; //快慢指针
for (int i = 0; i < n; i++) {
fast = fast->next;
}
while (fast) {
fast = fast->next;
pre = slow;
slow = slow->next;
}
//将要删除的结点的前一个结点和后一个结点联系起来
pre->next = slow->next;
return res->next;
}
};
该篇内容主要讲述了如何使用C++编程语言,通过快慢指针法来实现删除链表中的倒数第n个节点。解决方案中创建了一个新的头节点,并利用两个指针,一个快速移动n步,然后两个指针同步移动,直到快速指针到达链表尾部,此时慢指针指向的就是待删除节点的前一个节点,从而实现删除操作。
438

被折叠的 条评论
为什么被折叠?



