美文网首页
lc25 关于链表

lc25 关于链表

作者: 锦绣拾年 | 来源:发表于2020-05-16 16:41 被阅读0次

复习知识点:
1)链表反转
2)关于指针。
理解C++中指针传参,
大概指针传参也是传的形参(like int数字),但是引用传参就是实参了,实际修改的

这道题快把我绕迷了。

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。


示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<ListNode*> reverse(ListNode* begin,ListNode* end){//传入是指针
        vector<ListNode*> res;
        ListNode* x=begin;
        ListNode* c=begin->next;
        if(begin==end){
            res.push_back(begin);
            res.push_back(end);
            return res;
        }
            
        if(begin->next==end){
            end->next=begin;
            begin->next=NULL;
            res.push_back(begin);
            res.push_back(end);
            return res;
        }
        
        ListNode* d=begin->next->next;        
        while(d!=end){
            c->next=x;
            x=c;
            c=d;
            d=d->next;
        }
        end->next=c;
        c->next=x;
        begin->next=NULL;
        res.push_back(begin);
        res.push_back(end);
        return res;
    }
    
    ListNode* reverseKGroup(ListNode* head, int k) {
        if(k==0||k==1)
            return head;
        ListNode* ppre=new ListNode(0);
        ListNode* pp=ppre;
        ppre->next=head;
        ListNode* pre=head;
        // ListNode* mid;
        ListNode* cur=head;
        int mid=0;
        while(cur){
            mid+=1;            
            if(mid==k){
                ListNode* tmp=cur->next;
                vector<ListNode*> res=reverse(pre,cur);
                res[0]->next=tmp;//begin
                ppre->next=res[1];//end
                ppre=res[0];
                pre=tmp;
                cur=tmp;
                mid=0;
                // continue;
            }else{
                cur=cur->next;
            }
            
            
        }
        // pp->next->next=NULL;
        return pp->next;
        //翻转链表写法
        
        
    }
};

相关文章

网友评论

      本文标题:lc25 关于链表

      本文链接:https://www.haomeiwen.com/subject/ecrrohtx.html