上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 62 下一页
摘要: 现在开始进入字符串系列。 判断回文串的。首尾各定义一个指针,然后相比较。难点在于如何提出非字母数字的字符。 bool isValidPalind(string s) { //转为小写,注意这个函数的用法 transform(s.begin(), s.end(), s.begin(), ::towlo 阅读全文
posted @ 2016-05-23 11:21 牧马人夏峥 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 很实际的一道题。定义一个双向链表list,方便插入和删除;定义一个哈希表,方便查找。 具体的,哈希表存放每个结点的key和它对应的结点的地址;访问结点时,如果结点存在,则将其交换到头部,同是更新哈希表中的地址; 插入结点时,首先判断capacity是否达到了上限,如果是则在链表和哈希表中删除该结点; 阅读全文
posted @ 2016-05-23 11:03 牧马人夏峥 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 找到中间结点,将后半部分反转接入即可。 ListNode *reoderList(ListNode* head) { if (head == nullptr || head->next == nullptr)return head; //找到中间结点的方法很巧妙 ListNode *slow = h 阅读全文
posted @ 2016-05-21 16:14 牧马人夏峥 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 两个思路,一是用哈希表记录每个结点是还被访问过;二是定义两个快、慢指针,如果存在环的话,两个指针必定会在某位结点相遇。 bool linkListNode(ListNode *head) { ListNode *fast=head, *slow=head; while (fast && fast-> 阅读全文
posted @ 2016-05-21 16:02 牧马人夏峥 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 深拷贝一个链表,不同的是这个链表有个额外的随机指针。参考:http://blog.csdn.net/ljiabin/article/details/39054999 做法非常的巧妙,分成三步,一是新建结点,并放在旧结点之后;二是修改新结点的random指针;三是将新旧链表断开。 RandomList 阅读全文
posted @ 2016-05-21 15:29 牧马人夏峥 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 这题有点繁琐,在更新指针时很容易出错。 ListNode *reverseKGroup(ListNode *head, int k) { if (head == nullptr || head->next == nullptr || k < 2)return head; ListNode dummy 阅读全文
posted @ 2016-05-19 15:52 牧马人夏峥 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 不允许通过值来交换,在更新指针时需要小心。 ListNode *swapNodes(ListNode* head) { ListNode dummy(-1); dummy.next = head; for (ListNode *prev = &dummy, *cur = prev->next, *p 阅读全文
posted @ 2016-05-19 14:48 牧马人夏峥 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 这题比较简单,方法有很多。其中一种比较有意思的做法是设置两个指针,一个先走n步,然后再一起走。一个到了末尾,另一个也就确定了要删除元素的位置。 ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode dummy{-1, head}; 阅读全文
posted @ 2016-05-19 14:27 牧马人夏峥 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 这题我的第一想法是用头插法,但实际上并不好做,因为每次都需要遍历最后一个。更简单的做法是将其连成环,找到相应的位置重新设头结点和尾结点。这过 有很多细节需要注意,比如K有可能是大于链表长度的,如何重新设置K等都要注意。 ListNode *rotateList(ListNode *head, int 阅读全文
posted @ 2016-05-19 14:06 牧马人夏峥 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 很简单的一题,需要注意的是如果某结点重复了记得将其删除。 ListNode *deleteDuplicates(ListNode *head) { if (head == nullptr) return nullptr; ListNode *prev = head; for (ListNode *c 阅读全文
posted @ 2016-05-18 15:34 牧马人夏峥 阅读(124) 评论(0) 推荐(0) 编辑
上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 62 下一页