【面试题】删除链表中倒数第n个节点

问题描述

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

样例 给出链表1->2->3->4->5->null和 n = 2.

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

解题思路

定义两个指针,刚开始分别指向头结点,然后先让一个指针先走n-1步,接着两个指针同时遍历链表,,当第一个指针到达链表尾部的时候,第二个指针指向的就是要删除的倒数第n个结点。 编程需要注意的是:

代码实现/** * Definition of ListNode * class ListNode { * public: *int val; *ListNode *next; *ListNode(int val) { *this->val = val; *this->next = NULL; *} * } */class Solution {public:/*** @param head: The first node of linked list.* @param n: An integer.* @return: The head of linked list.*/ListNode *removeNthFromEnd(ListNode *head, int n) {// write your code hereListNode *fast = head;ListNode *low = head;ListNode *pre = NULL;if(head == NULL || n <= 0){return NULL; //输入的链表为空,或输入的n不合法;}for(int i = 0; i < n-1; i ++){if(fast->next){fast = fast->next;}else{return NULL; //输入的n大于链表的长度;}}while(fast->next){fast = fast->next;pre = low;//需要保存需要删除的那个结点的上一个结点。low = low->next;}if(low == head) //删除的那个结点是头结点。{head = head->next;}else{pre->next = pre->next->next;}return head;}};

哪里会顾得上这些。等到时间将矛盾一层层降解为流言是非误解过结

【面试题】删除链表中倒数第n个节点

相关文章:

你感兴趣的文章:

标签云: