链表:删除倒数第n个节点
2018-03-04 21:40
756 查看
给定一个链表,删除倒数第n个节点。要求只遍历一遍
如链表:1->2->3->4->5,n=2,则结果为 1->2->3->5。
思路:设置两个指针,一个先向前移动n个节点,然后两个同步向前移动,直到前一个指针到达链表末端,则后一个指针的下一个节点就是要删除的节点。
注意:当删除的节点是链表头时是特殊情况,此时前一个指针已经移动到了链表末尾的null节点上,需特别处理。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i<n; i++)
fast = fast.next;
if(fast == null)
return head.next;
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}
如链表:1->2->3->4->5,n=2,则结果为 1->2->3->5。
思路:设置两个指针,一个先向前移动n个节点,然后两个同步向前移动,直到前一个指针到达链表末端,则后一个指针的下一个节点就是要删除的节点。
注意:当删除的节点是链表头时是特殊情况,此时前一个指针已经移动到了链表末尾的null节点上,需特别处理。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i<n; i++)
fast = fast.next;
if(fast == null)
return head.next;
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}
相关文章推荐
- lintcode删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- [LeetCode]78. Remove Nth Node From end of List删除链表中倒数第N个节点
- 删除链表中倒数第n个节点
- 每天一道LeetCode-----删除链表倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 链表遍历一次删除倒数第N个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- LintCode : 删除链表中倒数第n个节点
- 【LeetCode】Remove Nth Node From End of List 删除链表中倒数第n个节点- Easy +
- 删除链表中倒数第n个节点
- LeetCode(Remove Nth Node From End of List)删除链表倒数第n个节点
- [C++]LeetCode 19: Remove Nth Node From End of List(删除链表中倒数第n个节点)
- 删除链表的倒数第N个节点
- leetcode19--删除链表中倒数第n个节点
- lintcode 174 删除链表中倒数第n个节点
- LintCode Remove Nth Node From End of List 删除链表中倒数第n个节点
- #19 Remove Nth Node From End of List(删除链表倒数第N个节点)