题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
http://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
解题思路:
先找出要删除元素位置的正序,再设置双指针,注意分成三类情况讨论:
1. 要删除的元素在链表第一个
2. 要删除的元素在链表最后
3. 要删除的元素在链表中间
代码展示:
public class Solution {
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
if (head==null) //特殊情况
return head;
ListNode p1 = head;
int l = 0;
while (p1!=null) {
l++;
p1 = p1.next;
}
l -= n; //找出位置的正序
if (l==0) //要删除的元素在链表第一个
return head.next;
else {
ListNode p2 = head; //设置双指针
for (int i = 0; i<l-1; i++)
p2 = p2.next;
ListNode p3 = p2.next.next;
if (p3==null) //要删除的元素在链表最后
p2.next = null;
else //要删除的元素在链表中间
p2.next = p3;
return head;
}
}
}
查看10道真题和解析