本文共 775 字,大约阅读时间需要 2 分钟。
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
给定的 n 保证是有效的。
定义两个快慢指针,一个标记指针,需要删除倒数第N个节点,就让快指针先跑N个节点,然后三个指针同时跑,当快指针为NULL时标记指针不动,则标记指针为需要删除指针的前一个
注意 在快指针跑N个节点后就为NULL的情况下,意思就是删除第一个节点,直接让头结点后移一位就可struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct ListNode *quick = head; struct ListNode *slow = head; struct ListNode *f = head; while(n--) { quick = quick -> next; } while(quick) { quick = quick -> next; slow = slow -> next; if(quick) { //quick指针不再变动,即为NULL时,f指针不动 f = f-> next; } } if(slow == head) { head = head -> next; } else { f -> next = slow -> next; } return head;}
转载地址:http://pwkti.baihongyu.com/