题目描述:
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
解题思路及代码:
### 解题思路
删除倒数第N个结点,即删除正数第Len(链表) - N个结点 + 1个结点,设为M。
1.考虑到可能原始链表只有一个结点,所以首先设置虚拟头结点;
2.从虚拟头结点开始,正向前进M步,找到待删除链表的前一个结点;
3.完成删除链表的操作p.next = p.next.next即可。
### 代码
```python
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
cnt = 0
p = head
while p:
cnt += 1
p = p.next
m = cnt - n + 1
ret = ListNode(0, head)
q = ret
while m > 1:
q = q.next
m -= 1
q.next = q.next.next
return ret.next
```
运行结果: