摘要: 这题有点繁琐,在更新指针时很容易出错。 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) 编辑