/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
if(head->next == NULL && n == 1) //处理链表有一个节点的情况
{
return NULL;
}
if(n <= 0) //处理不删除节点对的情况
{
return head;
}
struct ListNode* p;
struct ListNode* q; //快慢指针
p = head; //处理链表中有2个及2个节点以上的情况
q = head;
int i = 0;
for(i = 0; i<n-1 ; i++) //快指针比慢指针多走 k-1步
{
p = p->next;
}
if(p->next == NULL)//目前快指针指向最后一个节点,而且慢指针还没有更新移动
{
return head->next;
}
while(p->next->next != NULL) //少走一步,(多走一步就到达尾结点)
{
p = p->next;
q = q->next;
}
q->next = q->next->next; //此时的q为要删除节点的前驱节点
return head;
}
1-7 单链表基本操作_删除链表的倒数第 N 个结点
于 2023-04-14 16:05:08 首次发布