【leetcode】删除链表的倒数第N个节点(C语言解答)

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

示例:

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

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

2、双指针的操作

      

分析:

首先让指针first指向头节点,然后让其向后移动n步,接着让指针sec指向头结点,并和first一起向后移动。当first的next指针为NULL时,sec即指向了要删除节点的前一个节点,接着让first指向的next指针指向要删除节点的下一个节点即可。注意如果要删除的节点是首节点,那么first向后移动结束时会为NULL,这样加一个判断其是否为NULL的条件,若为NULL则返回头结点的next指针。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode* first=head;
    while(n--!=0)
        first=first->next;
    if(!first)
        return head->next;
    struct ListNode* sec=head;
    while(first->next!=NULL){
        sec=sec->next;
        first=first->next;
    }
    sec->next=sec->next->next;
    return head;

}
    

 

你可能感兴趣的:(链表)