您的位置:首页 > 其它

leetcode 删除链表的倒数第N个节点

2019-01-15 11:42 417 查看

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

 

解题思路:

主要是利用双指针法,从头到尾依次遍历,这两个指针相隔N个节点,这样的话,快指针到最后一位的时候,满指针正好指向要删除的节点。

[code]/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//先判断头结点
if(head.next==null) return null;
//定义两个节点,一个比另一个快,相差N个节点,这样,当第一个走到尾节点的时候,第二个节点指向的正是要删除的节点
ListNode first = head;
ListNode second = head;
//先让第一个走N步
for (int i = 0;i<n;i++) {
first=first.next;
}
//判断是否已经是尾节点了,如果是,那就直接返回头节点
if(first == null) {
head=head.next;
return head;
}
//两个节点都同时往后走
while(first.next!=null) {
second = second.next;
first=first.next;
}
//删除节点second
//second.val = second.next.val;
second.next = second.next.next;

return head;

}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: