LeetCode 19 Remove Nth Node From End of List

来源:互联网 发布:淘宝宝贝详情图被拉伸 编辑:程序博客网 时间:2024/06/08 15:27

题目:

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.

题目链接

题意:

给一个链表,去掉从后面数第n个结点,并且返回链表的首结点。

要求:给定的n一定为有效合法的值,并且尽量一步达到要求。

常规思路是先计算链表的长度len,之后计算正序idx = len-n,然后进行删除结点算法,代码如下:

class Solution {    public ListNode removeNthFromEnd(ListNode head, int n) {        int len = 0;        for (ListNode node = head; node != null; len++, node = node.next);        int idx = len - n;        if (idx == 0) {            head = head.next;        }        else {            ListNode node = head;            while (idx>1) {                node = node.next;                idx --;            }            node.next = node.next.next;        }        return head;    }}
网上大佬的思路一般是定义两个结点指针a,b,之后让b先跑n步,之后a和b同步进行,跑到b.next == null时,对a.next进行删除操作,代码如下:

class Solution {    public ListNode removeNthFromEnd(ListNode head, int n) {        ListNode a, b;        a = b = head;        while (n-- > 0) {            b = b.next;        }        if (b == null) {            return head.next;        }        b = b.next;        while (b != null) {            a = a.next;            b = b.next;        }        a.next = a.next.next;        return head;    }}


阅读全文
0 0
原创粉丝点击