您的位置:首页 > 编程语言 > C语言/C++

LeetCode 19: 删除链表的倒数第N个节点 C++实现

2019-05-30 16:08 387 查看

思路

两次遍历算法:第一次遍历得到链表长度len,第二次遍历到(len - n)后删除下一节点(要删除的节点位于len - n + 1)
一次遍历算法:双指针,保持恒定间距(此处设置为n)同时移动

代码实现

//两次遍历
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* curr = head;
int len = 0;
while(curr != NULL){
len++;
curr = curr->next;
}
int i = 1;
curr = head;
if (n == len) return head->next;
while(1){
if(i == len - n){
break;
}
curr = curr->next;
i++;
}
curr->next = curr->next->next;
return head;
}
};
//一次遍历
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* begin, * end;
begin = end = dummy;
int i = 0;
while(end->next != NULL){
end = end->next;
i++;
if(i > n){
begin = begin->next;
}
}
begin->next = begin->next->next;
return dummy->next;
};
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: