每天一道leetcode19-删除链表的倒数第N个节点 分类:链表 中文链接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 英文链接 https://leetcode.com/problems/remove-nth-node-from-end-of-list/
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?
思路
代码
/**
* 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) {
int length = 0;
if(n == 1)
{
if(head.next == null)
return null;
ListNode temp = head.next;
ListNode pre = head;
while(temp.next != null)
{
temp = temp.next;
pre = pre.next;
}
pre.next = null;
return head;
}
n = n -1;
ListNode fast = head;
ListNode slow = head;
for(int i=0;i<n;i++)
fast = fast.next;
while(fast.next != null)
{
fast = fast.next;
slow = slow.next;
}
slow.val = slow.next.val;
slow.next = slow.next.next;
return head;
}
}
代码讲解