C语言删除链表的倒数第N个节点
要求:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
解法:设置双指针,如果要删除第n个节点,就让一个指针比另外一个指针快n步
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *pone,*poneNext,*ponedelete;
pone =poneNext = head;
ponedelete = NULL;
while(n>0){ //设置双指针,如果要删除第n个节点,就让一个指针比另外一个指针快n步
poneNext = poneNext -> next; //把poneNext移动n步
n--;
}
if(poneNext==NULL) //这个是去掉头节点的情况
{head = head->next;
return head;
}
while (poneNext->next != NULL){ //两个指针同步移动
pone = pone -> next ;
poneNext = poneNext -> next ;
}
ponedelete = pone -> next ; //得到要删除的节点
pone -> next = ponedelete -> next ; //将要删除的节点的后一节点以及前一节点连起来
free(ponedelete); //释放空间
return head;
}