Leetcode 19. Remove Nth Node From End of List

题目

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.
Note:
Given n will always be valid.
Try to do this in one pass.

分析

给定一个链表,移除从队尾向前数的第n个节点。
由于是链表,只能从前向后寻找数据,所以先遍历看一共多少数据,即可知道要移除的倒数第几个数字是正数的第几个数字。
之后寻找该几点和其前节点,然后替换next指针即可,C代码如下,已通过。
也可以使用两个指针,先让一个走n步,另一个接着走。那么当第一个指针达到链表尾部时候,第二个指针指向第n个节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode * p=head, *q=head;
    int length=0;
    while(p!=NULL)
    {
        p=p->next;
        length++;
    }
    p=head;
    if(n>length)
        n=1;
    else
        n=length-n+1;
    while(n-1>0&&p->next!=NULL)
    {
        q=p;
        p=p->next;
        n--;
    }
    if(q==p)
    {
        head=head->next;
    }
    else
    {
        q->next=p->next;
    }
    return head;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容