码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]#19 Remove Nth Node From the End of list

时间:2015-09-23 16:23:29      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

从移动回来一个月,就一直在忙项目申请书的事情。通过写申请书,看新闻联播的新闻稿都开始顺眼了。

师兄师姐们已经开始找工作了,我还有一年时间,工作方面早作准备。机器学习方面继续推导常见的算法,刷一刷kaggle,做做特征工程什么的,算是应用了。

今天这道题其实并不难,但我是在Linux下写的,有些本地调试的方法和技巧想记录一下。

 

一、题目

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个结点,最好用一次遍历的方法。

第一反应当然是遍历一遍链表,看一下长度是多少;然后再遍历链表,删除倒数第n个。

看到一次遍历后,就决定用空间换时间,开一个list存结点的地址,这样只需要在list里用两三步就能实现节点的删除

 

三、代码

 1 # Definition for singly-linked list.
 2 # class ListNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution(object):
 8     def removeNthFromEnd(self, head, n):
 9         """
10         :type head: ListNode
11         :type n: int
12         :rtype: ListNode
13         """
14         address = []
15         while head:
16             address.append(head)
17             head = head.next
18         
19         length = len(address)
20         if length == 0:
21             return address[0]
22         elif length == 1:
23             if n == 0:
24                 return address[0]
25             elif n == 1:
26                 return []
27         else:
28             if n == 0:
29                 return address[0]
30             elif length == n:
31                 return address[1]
32             else:
33                 target = address[length - n]
34                 p = target.next
35                 address[length - n - 1].next = p
36                 del(address[length - n])
37                 return address[0]

 

四、收获

1.前两天装了CentOS,用VIM写这个程序。在本地调试的时候,遇到了麻烦,平时没怎么写过Class,突然一下就不会调试了。经过恪爷指导,通过零星的一点知识储备,最终还是搞定了。

程序结构应该是这样的:

 1 ###########q19.py###############
 2 Class ListNode(object):
 3     def __init__(self, x):
 4         self.val = x
 5         self.next = None
 6 
 7 Class Solution(object):
 8     def removeNthFromEnd(self, head, n):
 9         ....
10         return head
11     
12     def main(self):
13         #不同类可以直接调用于声明对象
14         head = LinkList(2)
15 
16         #在类中,调用同类方法要用self.function()
17         linklist = self.removeNthFromEnd(head, 3)  
18 
19         return linklist
20     
21 sl = Solution()
22 sl.main()
23 
24 ##############终端调试############
25 import q19
26 sl = q19.Solution()
27 linklist = q19.main()    
28 
29 
30 其实是不需要Solution中def main(),直接sl.removeNthFromEnd也是可以调用函数的,但是在main中还是要方便一些。

[LeetCode]#19 Remove Nth Node From the End of list

标签:

原文地址:http://www.cnblogs.com/breada/p/4832153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!