Lintcode LinkedList 174 Remove Nth Node From End of List
来源:互联网 发布:伊迪芬奇的秘密知乎 编辑:程序博客网 时间:2024/06/06 07:20
Given a linked list, remove the nth node from the end of list and return its head.
Example
Given linked list: 1->2->3->4->5->null
, and n = 2
.
After removing the second node from the end, the linked list becomes 1->2->3->5->null
.
C++:
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode *removeNthFromEnd(ListNode *head, int n) { // write your code here if (!head->next) return NULL; ListNode *pre = head, *cur = head; for (int i = 0; i < n ; ++i) cur = cur->next; if (!cur) return head->next; 不用dummy while (cur->next) { cur = cur->next; pre = pre->next; } pre->next = pre->next->next; return head; }};
C++ dummy版本
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode *removeNthFromEnd(ListNode *head, int n) { // write your code here ListNode *dummy = new ListNode(0); dummy->next = head; ListNode *pre = dummy; for(int i=0;i<n;i++){ if(head==NULL) return NULL; head = head->next; } while(head!=NULL){ head = head->next; pre = pre->next; } pre->next = pre->next->next; return dummy->next; }};JAVA:创建dummy一个值为0的头指针,将head连接到dummy后,如果Listnode head 为1->2->3->4->5->null,连接后的dummy为
0->1->2->3->4->5->null。注意head指针仍指向值为1的(即第二个)结点,引进dummy的原因是在1->2->null,n=2这种情况
无需删除头结点,返回dummy.next即可解决。
head指向dummy的第二个结点,i<n-1,head循环之后指向第三个结点,pre指向第一个结点,0->1->2->3->4->5->null。
只要head.next不是null,head和pre就向后同步移动,0->1->2->3->4->5->null。然后用
pre.next = pre.next.next删除结点值为4的结点。最后返回dummy.next将值为0的结点去掉。
如果for循环中i<n,那么while循环中的条件改为head!=null,0->1->2->3->4->5->null同步移动到0->1->2->3->4->5->null
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ ListNode removeNthFromEnd(ListNode head, int n) { // write your code hereif (n <= 0) { if(n <= 0) return null; ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; for(int i = 0; i<n-1; i++){ if(head == null) return null; head = head.next; } while(head.next!=null){ head = head.next; pre = pre.next; } pre.next = pre.next.next; return dummy.next; }}Python
"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next"""class Solution: """ @param head: The first node of linked list. @param n: An integer. @return: The head of linked list. """ def removeNthFromEnd(self, head, n): # write your code here res = ListNode(0) res.next = head tmp = res for i in range(0, n): head = head.next while head != None: head = head.next tmp = tmp.next tmp.next = tmp.next.next return res.next
类似的思路还有LinkedList166Nth to Last Node in List,只需找到结点,无需返回链表,所以无需构造dummy。
阅读全文
0 0
- Lintcode LinkedList 174 Remove Nth Node From End of List
- LintCode 174:Remove Nth Node From End of List
- [Lintcode]Remove Nth Node From End of List
- lintcode: Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node from End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- Remove Nth Node From End of List
- 图说Java —— 理解Java机制最受欢迎的8幅图
- 5.Spring总结以及在面试中的一些问题
- C++变量申明和定义的关系
- prometheus丢数据调试与处理
- 磁盘存储容量计算
- Lintcode LinkedList 174 Remove Nth Node From End of List
- java base64编码的三种方式
- 基于Xposed的一款脱壳神器ZjDroid工具原理解析
- Android 图片人脸识别剪切
- 写一个简单的scala的hello world出现的问题
- Java8 foreach
- Android Action Bar动态改变标题
- Plug-in 首选项
- eclipse c/c++ ubuntu16.04安装