19. Remove Nth Node From End of List
基础链表操作。
但是居然还是犯了好几个错误。
在链表为一个节点,并且要求删除倒数第一个节点的case里面错了。
我自己的做法是,设置一个假头。
1 public ListNode removeNthFromEnd(ListNode head, int n) { 2 if(head == null) { 3 return null; 4 } 5 ListNode dummy = new ListNode(-1); 6 dummy.next = head; 7 ListNode walker = dummy; 8 ListNode runner = dummy; 9 while(n > 0) { 10 runner = runner.next; 11 n--; 12 } 13 while(runner.next != null) { 14 runner = runner.next; 15 walker = walker.next; 16 } 17 walker.next = walker.next.next; 18 return dummy.next; 19 }
然后看到code ganker神的解法不需要用dummy head,而且讨论了一些情况
1 public ListNode removeNthFromEnd(ListNode head, int n) { 2 if(head == null) 3 return null; 4 int i=0; 5 ListNode runner = head; 6 while(runner!=null && i<n) 7 { 8 runner = runner.next; 9 i++; 10 } 11 if(i<n) //如果给定的n不合理 12 return head; 13 if(runner == null)//如果出现我之前说的那种仅有一个元素的情况 14 return head.next; 15 ListNode walker = head; 16 while(runner.next!=null)//一般情况 17 { 18 walker = walker.next; 19 runner = runner.next; 20 } 21 walker.next = walker.next.next; 22 return head; 23 }
原文链接:http://blog.csdn.net/linhuanmars/article/details/19778441