一、 问题描述
Leecode第十九题,题目为:
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Follow up:
Could you do this in one pass?
问题理解为:
给定一个链表,从链表末尾删除第n个节点并返回其头部。
例子:
给出链表:1->2->3->4->5,n = 2。
从末尾删除第二个节点后,链表变为1->2->3->5。
注意:
给定n总是有效的。
跟进:
你能一次做完吗?
二、算法思路
1、本题目应用快慢指针
2、
三、实现代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode a = head;
ListNode b = head;
for (int i = 0; i < n && a != null; i++) {
a = a.next;
}
if (a == null) {
head = head.next;
return head;
}
while (a.next != null) {
a = a.next;
b = b.next;
}
b.next = b.next.next;
return head;
}
}