标签:Node head End 19 next nth ListNode 倒数第 指针
19. Remove Nth Node From End of List
题解:
本题主要思路时一直关注倒数第n个,从指针 1 遍历开始就计算 head 是倒数第几个,当 head 是倒数第 n 个时就用指针 2 开始记录第 n 个的位置,指针 1 和 2 同时变化,则指针 2 一直指向倒数第 n 个节点,则当直到指针 1 遍历全部链表,则指针 2 位置为倒数第 n 个。具体细节见代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(n == 0){
return head;
}
ListNode *ptr, *prep; // 指向当前节点
ListNode *nth, *prepNth; // 指向倒数第n个节点
int num = 0;
prep = head, ptr = head->next, num++; //初始化当前指针
nth = prepNth = NULL;
if(num == n){
nth = head;
// 针对 n = 1 情况
// 初始化nth指针,当 num == n 时,说明已经走过 n 个节点,令nth指向head;
}
while(ptr != NULL){
if(nth != NULL){
// 指针移动
prepNth = nth;
nth = nth->next;
}
prep = ptr;
ptr = ptr->next;
num++;
if(num == n){
nth = head;
// 针对 n > 1 情况
}
}
if(nth == NULL){
return head; // 当倒数第 n 个不存在
}
else if(nth == head){
return head->next; // 当倒数第 n 为第一个
}
// 其余情况
prepNth->next = nth->next;
nth->next = NULL;
//free(nth);
return head;
}
};
RememberUrHeart 发布了37 篇原创文章 · 获赞 7 · 访问量 6101 私信 关注
标签:Node,head,End,19,next,nth,ListNode,倒数第,指针 来源: https://blog.csdn.net/qq_40491305/article/details/104074036
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。