【链表&删除倒数第K个节点】Remove Nth Node From End of List

来源:互联网 发布:毒品是谁发明的知乎 编辑:程序博客网 时间:2024/05/21 15:48

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.

题意:删除链表的倒数第K个节点

解法:三个指针,p1指向尾节点,p2指向倒数第K个节点,pre指向要删除节点的前一个节点,注意特殊情况,刚好要删除的节点是头结点的情况

public class Solution {    public ListNode removeNthFromEnd(ListNode head, int n) {        ListNode p1 = head;        ListNode p2 = null, pre=null;        int k = 0;                while(p1 != null){            k++;            p1 = p1.next;                        if(k == n){                p2 = head;            }             else if(k > n){                pre = p2;                p2 = p2.next;            }        }                if(p2 != null){            if(pre == null) head = p2.next;            else pre.next = p2.next;        }                return head;    }}


0 0
原创粉丝点击