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

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

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

使用快慢指针来解决,快指针比慢指针快n步,这样当快指针到链表尾时快指针刚才指向的是倒数的n个节点。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        // write code here
        ListNode* slow = head;
        ListNode* fast = head;
        //快指针先走n步;
        while(n--)
        {
            fast = fast->next;
        }

        if(fast == NULL)
        {
            ListNode *tmp = head->next;
            free(head);
            head = NULL;
            return tmp;
        }else
        {
            //快指针走到尾时,慢指针刚好是倒数第n个节点;
            while(fast->next)
            {
                slow = slow->next;
                fast = fast->next;
            }

            ListNode* tmp = slow->next;
            slow->next = slow->next->next;

            tmp->next = NULL;
            free(tmp);
            tmp = NULL;
            return head;
        }
    }
};
全部评论

相关推荐

03-26 13:04
已编辑
电子科技大学 算法工程师
xiaowl:你这个简历“条目上”都比较有深度性,但是实际上面试官又没法很好的评估你是怎么达到很多看上去很厉害的结果的。要避免一些看上去很厉害的包装,比如高效的内存复用策略的表达,如果仅是简单的一些内存共享机制,而且面试上也没有深挖的空间,就不要这样表达。比如,工程化模式本质上可能就是定义了一些abstract class,那也就没特别多值得讲的内容。建议简历上应该侧重那些你花了大量时间和精力解决、研究的问题,不要过分追求“丰富”,而是关注在技术深入度、问题解决能力的表现上。
没有实习经历,还有机会进...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务