摘要: 看了网上别人的代码总算搞懂了题意,把整个链表分为两部分,左边有len-k个节点,右边有k个节点,然后这两部分次序调换。 注意有k>len的情况,因此首先要处理k,k=k%len。 首先遍历至链表尾,将表尾链至表头(tmp->next = head),形成一个闭环,再从表尾出发,经过len - k % 阅读全文
posted @ 2016-03-14 19:45 co0oder 阅读(146) 评论(0) 推荐(0) 编辑
摘要: merge思想,应该还有更快算法,留坑。 阅读全文
posted @ 2016-03-14 19:26 co0oder 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 一开始理解错题意,以为是根据节点内的值是奇偶来分成不同group,实际上是节点所在位置的奇偶(位置从1开始算起)。   思路正确后仍然RE的代码: 起因是8、9行,因为odd和even本身已经是head和head->next两个节点,再设置next为NULL就相当于截断了原链表,even->next 阅读全文
posted @ 2016-03-14 19:20 co0oder 阅读(176) 评论(0) 推荐(0) 编辑
摘要:   最简单的思路,遍历一遍链表得到长度,将前半段放入栈中,再与后半段比较。时间和空间均为O(n)。   时间O(n),空间O(1): 思路:翻转后半部分的链表,然后前半部分和后半部分一一进行比较。 具体实现: getMid函数中,fast一次走2步,slow一次走1步,因此假设全长len,len偶时 阅读全文
posted @ 2016-03-13 23:16 co0oder 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 1 class Solution { 2 public: 3 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 4 ListNode* head = new ListNode(0); 5 ListNode* res = head; 6 whi 阅读全文
posted @ 2016-03-10 21:10 co0oder 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 1 class Solution { 2 public: 3 int length(ListNode* head){ 4 ListNode* tmp = head; 5 int len = 0; 6 while(tmp != NULL){ 7 ++ len; 8 tmp = tmp->next; 9 阅读全文
posted @ 2016-03-10 21:01 co0oder 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 1 class Solution { 2 public: 3 void deleteNode(ListNode* node) { 4 if(node == NULL || node->next == NULL){ 5 node = NULL; 6 return; 7 } 8 ListNode* tm 阅读全文
posted @ 2016-03-10 20:13 co0oder 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 思路源于位运算关于异或^的定律:a^b^b = a, a^0 = a; 1 class Solution { 2 public: 3 int singleNumber(vector<int>& nums) { 4 int res=0; 5 for(auto num : nums) 6 res ^= 阅读全文
posted @ 2016-03-05 21:52 co0oder 阅读(102) 评论(0) 推荐(0) 编辑
摘要: [26]位数组,存储对应字母出现的个数,s、t分别得到不同数组,比较两个数组是否相同。 1 class Solution { 2 public: 3 bool isAnagram(string s, string t) { 4 if(s.length() != t.length()) return 阅读全文
posted @ 2016-03-05 21:34 co0oder 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 不符合的情况有三种:1、pattern和str长度不符 2、pattern中不同字母指向str中同一词(a、b->同一词) 3、同一字母指向不同词(a->不同词) 1 class Solution { 2 public: 3 vector<string> split(string str){ 4 v 阅读全文
posted @ 2016-03-05 21:05 co0oder 阅读(320) 评论(0) 推荐(0) 编辑