Remove Nth Node From End of List

来源:互联网 发布:unity3d 录屏 编辑:程序博客网 时间:2024/06/05 08:42

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. Note: Given n will always be valid. Try to do this in one pass.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {   public ListNode removeNthFromEnd(ListNode head, int n) {        if (head == null){               return null;        }        ListNode p1 = head, p2 = head;        while (n > 0){  //p2先走n步            p2 = p2.next;            n --;        }        if (p2 == null){          //若k走完n步已经到达末尾,则说明head即为要删除的节点            head = head.next;            return head;        }        while (p2.next != null){        //令p2.next==null,找到的节点即为要被删除节点的前驱节点            p1 = p1.next;            p2 = p2.next;        }        p1.next = p1.next.next; //p1.next即为倒数第n个节点        return head;    }}
0 0
原创粉丝点击