删除链表中倒数第n个节点
2017-03-31 17:21
323 查看
问题描述:
给定一个链表,删除链表中倒数第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:
ListNode *removeNthFromEnd(ListNode *head, int n) {
if (n <= 0 || head == NULL) return head;
ListNode* p1 = head;
while (n > 0 && p1 != NULL) {
p1 = p1->next;
n--;
}
if (p1 == NULL) {
return head->next; //删除第一个节点的情况
}
ListNode* p2 = head;
while (p1->next != NULL) {
p1 = p1->next;
p2 = p2->next;
}
p2->next=p2->next->next;
return head;
// write your code here
}
};
感想:
这种方法需要注意,没有想到。
给定一个链表,删除链表中倒数第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:
ListNode *removeNthFromEnd(ListNode *head, int n) {
if (n <= 0 || head == NULL) return head;
ListNode* p1 = head;
while (n > 0 && p1 != NULL) {
p1 = p1->next;
n--;
}
if (p1 == NULL) {
return head->next; //删除第一个节点的情况
}
ListNode* p2 = head;
while (p1->next != NULL) {
p1 = p1->next;
p2 = p2->next;
}
p2->next=p2->next->next;
return head;
// write your code here
}
};
感想:
这种方法需要注意,没有想到。
相关文章推荐
- 174 - 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- LintCode—删除链表中倒数第n个节点(174)
- 删除链表中倒数第n个节点
- lintCode-删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- lintcode-删除链表中倒数第n个节点-174
- 坚持坚持!用Java写出删除一个链表的倒数第N个节点,并返回头节点(N总是可达的)
- 删除链表中倒数第n个节点
- Remove Nth Node From End of List 删除链表倒数第N个节点
- 删除链表的倒数第N个节点
- leetcode-19. Remove Nth Node From End of List(删除链表倒数第N个节点)
- [LeetCode]—Remove Nth Node From End of List 删除链表的倒数第n个节点
- 删除链表中倒数第n个节点
- leetcode:Remove Nth Node From End of List(删除链表倒数第n个节点)【面试算法题】
- 删除链表中倒数第n个节点
- 删除单向链表倒数第n个节点
- lintcode删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- Leet Code 19 删除链表中倒数第n个节点 - Java