您的位置:首页 > 其它

删除链表中倒数第n个节点

2016-07-10 20:54 323 查看

题目

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

注意事项

链表中的节点个数大于等于n

样例

给出链表1->2->3->4->5->null和 n = 2.

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

解题

定义两个指针,slow、fast

fast先先前走n步后、slow和fast一起走,直到fast到最后一个结点

当fast为空,说明fast在最后一个结点后面了,说明需要删除的是第一个结点,直接删除

为了方便删除第一个结点,加入头结点

下面slow.next指向的是需要删除的结点,直接删除

/**
* Definition for ListNode.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int val) {
*         this.val = val;
*         this.next = null;
*     }
* }
*/
public class Solution {
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: The head of linked list.
*/
ListNode removeNthFromEnd(ListNode head, int n) {
// write your code here
ListNode p1 = head;
if(n<=0 || p1==null)
return p1;
// 加上头结点
ListNode dummy = new ListNode(-1);
dummy.next = head;
head = dummy;
ListNode slow = head.next;
ListNode fast = head.next;
while(n>=1){
fast = fast.next;
n--;
}
if(fast==null) // 说明删除的是第一个非头结点
return head.next.next;
while(fast.next!=null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next; // slow.next指向删除结点
return head.next;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: