当前位置:   article > 正文

算法纯小白的学习日记Day1

算法纯小白的学习日记Day1

今天研究一下昨天没写出来的链表题leetcode25题

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode() : val(0), next(nullptr) {}
  7. * ListNode(int x) : val(x), next(nullptr) {}//记住这里不用加;因为这是构造函数
  8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  9. * };//记得加;因为这里代表的是定义了一个类
  10. */
  11. class Solution {
  12. public:
  13. pair<ListNode*,ListNode*>myreverse(ListNode*head,ListNode*tail){
  14. ListNode*pre=tail->next;//这里的pre是因为在转置之中tail->next将会变成head-next
  15. ListNode*cur=head;//每次改变链表都用cur来改变
  16. while(pre!=tail){
  17. ListNode*next=cur->next;
  18. cur->next=pre;
  19. pre=cur;
  20. cur=next;
  21. }
  22. return {tail,head};//返回一个新的头和尾
  23. }
  24. ListNode* reverseKGroup(ListNode* head, int k) {
  25. ListNode*hair=new ListNode(0);//设置一个dummy来方便最后输出链表
  26. hair->next=head;
  27. ListNode*pre=hair;
  28. while(head){
  29. ListNode*tail=pre;
  30. for(int i=0;i<k;i++){
  31. tail=tail->next;
  32. if(!tail){
  33. return hair->next;//当tail到结尾时候,代表这个函数已经运行完毕了,所有
  34. //以直接返回答案
  35. }
  36. }
  37. ListNode*next=tail->next;
  38. tie(head,tail)=myreverse(head,tail);
  39. pre->next=head;
  40. tail->next=next;
  41. pre=tail;//快速得到pre;
  42. head=tail->next;//快速得到head
  43. }
  44. return hair->next;
  45. }
  46. };

这里还用到了pair来将head和tail链接在一起

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/784946
推荐阅读
相关标签
  

闽ICP备14008679号