一、找出单链表的倒数第n个元素
题目:找出一个单链表的倒数第n个元素,并且删除,返回新链表的头结点。要求是只允许遍历一次。
ListNode *removeNthFromEnd(ListNode *head, int n) {
if(head == NULL) return NULL;
ListNode *ret = head;
ListNode *last = head, *first = head;
while(n-- && last) last = last->next; // 前面的指针先走n步
if(last == NULL) return ret->next; // 走n步已经到尾结点,则要删除的是头结点,返回头结点的下一个结点
// 找到要删除的结点的前一个结点
while(last->next){
first = first->next;
last = last->next;
}
first->next = first->next->next; // 删除
return ret;
}