题解 | # 删除链表的倒数第n个节点 #

删除链表的倒数第n个节点

http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6

class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { // write code here stack<ListNode*> s; ListNode* p = head; ListNode* cur, pre; while (p) { s.push(p); p = p->next; } for(int i=0;i<n;++i){ s.pop(); if(s.empty()) return head->next; pre=s.top(); } for (ListNode q = head; q; q = q->next) { if (q == pre) { cur = q->next; q->next = cur->next; } } return head; } };

利用栈来存放链表,利用栈的先进后出的特性找到待删除节点的前一个结点,在根据这个节点找到待删除结点,利用链表删除的性质从而完成题目要求。有一种特殊情况就是待删除结点位置等于链表的长度,这种情况就下直接让head=head->next。 (如果想一步到位的话,可以设置一个空哨头节点,由于时间原因我这里不多陈述,感兴趣的同学可以自己试试)

全部评论

相关推荐

03-16 22:00
武汉大学 C++
幸福的小熊猫想要offer:我阿里投的 c++岗,面试官说自己是做 java 的,c++这辈子才有了
点赞 评论 收藏
分享
1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务