删除链表中倒数第n个节点
来源:互联网 发布:php程序是什么 编辑:程序博客网 时间:2024/06/06 03:08
问题描述:
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
注意事项:链表中的节点个数大于等于n
样例:给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
思路:
主要用两个指针,先让第一个指针指向第n个节点时,让第二个指针指向头节点,再让第二个与第一个同时开始走,两个指针始终相差n步,当第一个指向最后一个节点的时候,恰好第二个指针指向倒数n+1个,然后覆盖删除。
代码:
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: The head of linked list.
*/
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode *p1 = head;
ListNode *p2 = head;
if (n <= 0 || head == NULL) return head;
while (n > 0 && p1 != NULL) {
p1 = p1->next;
n--;
} //找到第n个节点
if (p1 == NULL) {
return head->next; //返回除头节点外的剩余节点
}
while (p1->next != NULL) {
p1 = p1->next;
p2 = p2->next;
} //两个指针相隔n,一起移动
p2->next=p2->next->next;
return head;
// write your code here
}
};
个人感悟:
建立思路很重要,用到了两个指针,感觉挺有趣。
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第N个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- Illegal operation on empty result set.错误的改正方法
- C++ 黑框框小游戏(1)—— 推箱子
- 【OpenCV】SIFT原理与源码分析
- 算法导论 练习题 5.3-2
- opencv:视频去黑暗(增强)
- 删除链表中倒数第n个节点
- 0404
- POJ1017_Packets_贪心
- java学习笔记3.29 3.30
- html页面传值问题已解决
- tip2——鼠标按下改变RelativeLayout背景颜色,松开变回
- 算法训练 连接字符串
- Windows Power Shell
- 序列