LeetCode 19. 删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

定义两个指针,第一个先从头指针head开始跑,跑n次的时候,从下一个开始和第一个一起开始跑,等到第一个跑到不为空位置,第二个指针正好跑到第n个节点的前一个,让第一个的next指针指向第一个的next指针的next节点。
//给定一个链表: 1->2->3->4->5, 和 n = 2.

//当删除了倒数第二个节点后,链表变为 1->2->3->5.

//说明:
//给定的 n 保证是有效的。


 struct ListNode {
     int val;
     struct ListNode *next;
 };
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    if(head == NULL){
        return head;
    }
    struct ListNode * p1;
    struct ListNode * p2;
    while(n){
        p1 = p1->next;
        n--;
    }
    p1 = p1->next;
    while(p1!=NULL){
        p1 = p1->next;
        p2 = p2->next;
    }
    p2->next = p2->next->next;
    return head;
}

你可能感兴趣的:(LeetCode 19. 删除链表的倒数第N个节点)