标签:dummy ListNode Python C++ next 链表 节点 指针
题目:
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
思路:
采用双指针,前面的指针比后面的指针先多走N+1个节点,当前面的指针到达None时,后面的指针所在位置的下一个节点就是要被删除的位置。
Python解法:
1 class ListNode: # 定义单链表 2 def __init__(self, x): 3 self.val = x 4 self.next = None 5 6 class Sloution(object): 7 @staticmethod 8 def remove_nth_from_end(head: ListNode, n: int) -> ListNode: 9 dummy = ListNode(0) 10 dummy.next = head 11 first = dummy # 由于条件可能是链表有N个节点,删除倒数第N个节点,所以双指针应指向dummy 12 second = dummy 13 for i in range(n+1): # 考虑到删除节点后需要重接链表,所以前面的指针先走n+1步 14 first = first.next 15 while first is not None: 16 first = first.next 17 second = second.next 18 second.next = second.next.next 19 return dummy.next # head有可能被删除,因此不能返回head
C++解法:
1 struct ListNode { // 定义单链表 2 int val; 3 ListNode *next; 4 ListNode(int x) : val(x), next(NULL) {} 5 }; 6 7 class Sloution { 8 public: 9 ListNode *removeNthFromEnd(ListNode *head, int n) { 10 ListNode *dummy = new ListNode(0); // 动态分配一个结构体对象作为哨兵节点 11 dummy->next = head; 12 ListNode *First = dummy; // 由于条件可能是链表有N个节点,删除倒数第N个节点,所以双指针应指向dummy 13 ListNode *Second = dummy; 14 for (int i = 0; i <= n; i++) // 考虑到删除节点后需要重接链表,所以前面的指针先走n+1步 15 First = First->next; 16 while(First != NULL) { 17 First = First->next; 18 Second = Second->next; 19 } 20 Second->next = Second->next->next; // 重新连接链表 21 return dummy->next; 22 } 23 };
标签:dummy,ListNode,Python,C++,next,链表,节点,指针 来源: https://www.cnblogs.com/kongzimengzixiaozhuzi/p/12993800.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。