第一次提交
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head.next==null) return null;//只有一个节点的链表的特殊处理 //关键是遍历到待删节点的前驱节点 ListNode p = new ListNode(); ListNode q = new ListNode(); p=head;q=head; if(n<1) return null; //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点 int i = 0; while(i
分析:没有考虑到删除第一个节点的特殊处理情况。第二次提交
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head.next==null) return null;//只有一个节点的链表的特殊处理 //关键是遍历到待删节点的前驱节点 ListNode p = new ListNode(); ListNode q = new ListNode(); p=head;q=head; //先令q指针领先p指针n个节点,然后两个指针步长为1进行遍历,当q的下一个节点为空指针时,p指针指向待删节点的前驱节点 int i = 0; while(i4.官方题解 class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0, head); ListNode first = head; ListNode second = dummy; for (int i = 0; i < n; ++i) { first = first.next; } while (first != null) { first = first.next; second = second.next; } second.next = second.next.next; ListNode ans = dummy.next; return ans; } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)