Leetcode: Remove Nth Node From End of List
来源:互联网 发布:.net求数组中元素相加 编辑:程序博客网 时间:2024/05/01 17:38
题目:
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-1,当后一个指针指向链表末尾结点的时候,前一个指针指向的结点就是要删除的结点。
C++参考代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution{public: ListNode *removeNthFromEnd(ListNode *head, int n) { if (!head) return nullptr; int count = 1; ListNode *previous = nullptr;//指向front元素前面的结点 ListNode *front = head;//前面的指针,指向要删除的结点 ListNode *back = head;//与front指针保持n-1的距离 //将back指针从第1个位置移动到第n个位置 while (count < n) { back = back->next; count++; } //将back指针一直移动到;链表最末尾 while (back->next) { previous = front; front = front->next; back = back->next; } //如果previous不为空,则将previous指针的next指向front的next,即将front删除 if (previous) { previous->next = front->next; } //如果previous为空,说明删除的是第一个位置的结点即头结点 else { head = head->next; } front = nullptr; return head; }};
C#参考代码:
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */public class Solution{ public ListNode RemoveNthFromEnd(ListNode head, int n) { if (head == null) return null; ListNode previous = null; ListNode front = head; ListNode back = head; for (int i = 0; i < n - 1; i++) { back = back.next; } while (back.next != null) { previous = front; front = front.next; back = back.next; } if (previous != null) { previous.next = front.next; } else { head = head.next; } front = null; return head; }}
Python参考代码:
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @return a ListNode def removeNthFromEnd(self, head, n): if not head: return None previous = None front = head back = head count = 1 while count < n: back = back.next count += 1 while back.next: previous = front front = front.next back = back.next if previous: previous.next = front.next else: head = head.next del front return head
0 0
- LeetCode[Linked List]: Remove Nth Node From End of List
- 19. Remove Nth Node From End of List leetcode list
- [Leetcode]LeetCode 19:Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- [Leetcode] Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- leetcode 40: Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- Leetcode 19 Remove Nth Node From End of List
- [Leetcode] Remove Nth Node From End of List
- [LeetCode]Remove Nth Node From End of List
- LeetCode-Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- LeetCode 19: Remove Nth Node From End of List
- LeetCode - Remove Nth Node From End of List
- LeetCode | Remove Nth Node From End of List
- leetcode之Remove Nth Node From End of List
- 【WIN32之旅】WINDOWS错误处理与参考(二)
- 公交车路线查询系统后台数据库设计--关联地名和站点
- 待调试 约瑟夫问题
- 公交车路线查询系统后台数据库设计--引入步行路线
- 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
- Leetcode: Remove Nth Node From End of List
- 公交车路线查询系统后台数据库设计--换乘算法改进与优化
- 策略模式
- core data 入门
- ACM对拍程序过程
- iOS 分别使用GDataXML和KissXML生成xml
- 公交车路线查询系统后台数据库设计
- 让脸皮在任何时候保持同样的温度
- 学习数据库笔记四