给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
解题思路:比较直观的思路就是将整个链表遍历并将结果加入到列表中,接着计算列表长度找到倒数第n个节点,并将其前一节点的指针指向该节点的后面一个,就可以了。运用这种思路需要注意链表的长度和n的取值,当n为最后一个或者第一个节点的时候情况比较特殊需要进行专门的处理,AC代码如下:
# 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 """ listNode = [] anotherhead = head while head: # 遍历链表 listNode.append(head) head = head.next length = len(listNode) if n == length == 1: # 只有一个节点,返回[] return [] elif n == 1: # 最后一个节点 listNode[length - 2].next = None elif n == length: # 第一个节点 anotherhead = listNode[1] else: listNode[length - n - 1].next = listNode[length - n + 1] return anotherhead