关闭

Easy-题目44:19. Remove Nth Node From End of List

98人阅读 评论(0) 收藏 举报
分类:

题目原文:
Given a linked list, remove the nth node from the end of list and return its head.

For example,
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
题目大意:
给出一个单链表,删除倒数第n个节点。
题目分析:
用两个指针,第一个指针p1指向头结点,然后第二个节点p2指向p1之后第n个节点(向右滑动n次)。然后并行向右滑动两个指针,直到p2为最后一个节点(p2->next==NULL),此时p1指向待删除节点的前一个节点,令p1=p1->next即可。
源码:(language:c)

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    if (!head)
        return NULL;
    struct ListNode *p1 = head;
    struct ListNode *p2 = head;
    for(int i = 0; i < n; i++)
        p2 = p2->next;
    if(!p2) 
        return head->next;

    while(p2->next) {
        p1 = p1->next;
        p2 = p2->next;
    }

    p1->next=p1->next->next;
    return head;
}

成绩:
0ms,beats 19.70%,众数0ms,80.30%
Cmershen的碎碎念:
本题有一个需要讨论的地方,就是在p2向右滑动n步的时候,有可能滑到最后一个节点的后面(即null),此时说明要删除的是头节点,直接返回head->next即可。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:63571次
    • 积分:3275
    • 等级:
    • 排名:第10731名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论