Leetcode 19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
思路:用快慢指针
对于每一个n,用第一个指针也就是快指针先跑n-1步,
然后再让两个指针同时跑,name当快指针跑到null时,满指针就跑到了要删除的节点
然后就先交换值,再把下一个节点的next扔到当前的next
特判一下n=1的时候,直接跑到最后一个节点就可以了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public ListNode removeNthFromEnd(ListNode head, int n) { 2 if(n==1) 3 { 4 if(head.next==null) { 5 return null; 6 } 7 ListNode temp=head.next; 8 ListNode pre=head; 9 while(temp.next!=null) 10 { 11 temp=temp.next; 12 pre=pre.next; 13 } 14 pre.next=null; 15 return head; 16 } 17 n=n-1; 18 ListNode fast=head; 19 ListNode slow=head; 20 for(int i=0;i<n;i++) 21 fast=fast.next; 22 23 while(fast.next!=null) 24 { 25 fast=fast.next; 26 slow=slow.next; 27 } 28 slow.val=slow.next.val; 29 slow.next=slow.next.next; 30 return head; 31 }