LeetCode初级算法-链表-2

题目:删除链表的倒数第N个节点

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

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

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

C语言解题

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode *fast=head,*slow=head;
    if(n==0)
        return head;

    while(n--)
        fast=fast->next;
    //fast为空时,说明要删除的是头结点。
    if(fast==NULL)
        return head->next;
    while(fast->next!=NULL)
    {
        slow=slow->next;
        fast=fast->next;
    }
    slow->next=slow->next->next;
    return head;
}

fast的指针先走n步,然后fast和slow一起走到fast为最后一个结点,那么slow->next即为要删除的结点。

你可能感兴趣的:(C语言,LeetCode)