Sunday, August 31, 2014

reverse linked list II@leetcode

Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

这种linkedlist操作相关的题,别的没有,就是繁琐和噁心。反正当时ac了再写的时候还是很容易出错得很烦,只能看反应速度了吧。没太多参考价值。 
考虑各种边界条件,像这个题还是得加个dumpHead.

 1. m == n || head == NULL || head->next == NULL 就直接return head

 2. m != n && # of nodes = 2
 m or n在某个边界点上, m or n不在。 dumpHead的作用就出现了,把dumpHead加上,所有的情况都是m, n不在边界点上,反正最后一个null节点可以当作正常节点看。
这个时候拿一个pre node记录m之前一个node, post是n的node. 中间的while循环就是 reverse linked list. 最后再操作一下把前后连接起来就行了,记得删除dumpHead, in case内存泄漏。

No comments:

Post a Comment

Leetcode 316. Remove Duplicate Letters

 这道题表面问的是如何删除重复,实际在问如何从多个字符选取一个保留,从而让整个字符串按升序排列。那么策略就是对于高顺位的字符比如‘a',就要选靠前位置的保留,而低顺位字符如’z'则应该尽量选取靠后位置保留。 算法大概思路:每看到一个字符,我们要决定是否保留 1. ...