19. Remove Nth Node From End of List

来源:互联网 发布:java冒泡排序算法代码 编辑:程序博客网 时间:2024/06/06 18:46

Given a linked list, remove the nth node from the end of list and return its head.

For 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.
题意:删除链表的倒数第n个数字
方法一:先遍历一遍链表,求出链表的长度,再删除length-n+1的数字

public class Solution {    public class ListNode {          int val;          ListNode next;          ListNode(int x) { val = x; }      }     public ListNode removeNthFromEnd(ListNode head, int n) {            if (head == null) {                  return null;              }              ListNode temp = head;              int count = 1;              while (temp.next != null) {                  count++;                  temp = temp.next;              }              if ((count - n + 1) == 1) {                  return head.next;              }              temp = head;              int i = 0;              while (temp != null) {                  i++;                  if (i == count - n) {                      temp.next = temp.next.next;                  }                  temp = temp.next;              }              return head;          }}

方法二:快慢指针,快指针和慢指针之间保持n的距离,当快指针遍历到最后一个数字时,慢指针正好在倒数第n个,只需要删除慢指针指向的数字即可

 if(head == null)        return null;    ListNode fast = head;    ListNode slow = head;    for(int i=0; i<n; i++){        fast = fast.next;    }    //if remove the first node    if(fast == null){        head = head.next;        return head;    }    while(fast.next != null){        fast = fast.next;        slow = slow.next;    }    slow.next = slow.next.next;    return head;
0 0