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位节点。其中n一定有效;一次遍历。
思路:删除倒数第n位,首先我们要找到倒数第n+1位,才能执行删除操作。
1.先通过cur指针指向当前节点,移动n位后,将del指向head首位(最终del指向被删除节点)。
2.将pre指向del前一位节点。
3.同时移动cur和del,当cur到达队尾时,del指向倒数第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) {
ListNode pre = null;
ListNode cur = head;
ListNode del = null;
for(int i=0;i<n;i++){
//System.out.println("cur:"+cur.val);
cur=cur.next;
}
del = head;
while(cur!=null){
pre=del;
del=del.next;
cur=cur.next;
}
if(pre==null)
return head.next;
pre.next=del.next;
return head;
}
}