您的位置:首页 > Web前端 > Node.js

19. Remove Nth Node From End of List

2016-09-16 09:14 260 查看
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个,然后把它删掉即可。

代码(C)

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
struct ListNode *newhead = (struct ListNode *)malloc(sizeof(struct ListNode));
if (NULL == newhead)
return head;
newhead->next = head;

struct ListNode *fast = newhead;
struct ListNode *pre = NULL;

int i = 0;
while(i < n)
{
fast = fast->next;
i++;
}
pre = newhead;
while(fast->next != NULL)
{
pre = pre->next;
fast = fast->next;
}
pre->next = pre->next->next;

return newhead->next;
}


这里定义一个newhead的原因是:当n等于链表长度时,需要删除头指针,这时候head要被删除。

代码(python)

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
newhead = ListNode(0)
newhead.next = head
fast = head
index = 0
while index < n:
fast = fast.next
index += 1
pre = newhead
while fast:
pre = pre.next
fast = fast.next
pre.next = pre.next.next
return newhead.next
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: