【面试题】删除链表中倒数第n个节点
2015-07-28 14:04
363 查看
问题描述
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
解题思路
定义两个指针,刚开始分别指向头结点,然后先让一个指针先走n-1步,接着两个指针同时遍历链表,当第一个指针到达链表尾部的时候,第二个指针指向的就是要删除的倒数第n个结点。编程需要注意的是:
输入的链表为空,或输入的n不合法;
输入的n大于链表的长度;
需要保存需要删除的那个结点的上一个结点。
删除的那个结点是头结点。
代码实现
[code]/** * 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 here ListNode *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; } };
相关文章推荐
- 黑马程序员--指针
- 面试题25_二叉树中和为某一值的路径
- 黑马程序员--循环语句
- 【黑马程序员】java的时间操作
- 阿里电话面试
- 黑马程序员----0704期java开发前奏
- 阿里常考面试题及答案
- 【黑马程序员】简略解析 java Scanner中的 next() 方法和 nextLine() 方法
- 黑马程序员--算数运算和运算符
- 数据库常见面试题
- 大众点评面试
- 黑马程序员--变量的内存分析
- (剑指Offer)面试题41:和为s的连续正数序列
- 黑马程序员----0704期java基础班心得
- 对程序员非常重要的24个软技能
- 黑马程序员--面向对象
- Android面试题
- 【SQL-码农】SQL 快速查看表结构 内查秘方
- C语言面试题
- 图像处理面试方法和前景