链表题目

1、反转链表

迭代

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* pre = nullptr;
        ListNode* next = nullptr;
        ListNode* cur = head;
        while(cur)
        {
            next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
};

递归

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head == nullptr || head->next == nullptr) return head;

        ListNode* ret = reverseList(head->next);
        head->next->next = head;
        head->next = nullptr;
        return ret; 
    }
};

2、k个一组反转链表

ListNode* reverse(ListNode* cur, ListNode* tail){
        ListNode * next = nullptr;
        ListNode * pre = nullptr;
        while(cur != tail)
        {
            next = cur->next;
            cur->next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }



    ListNode* reverseKGroup(ListNode* head, int k){
        if(head == nullptr || head->next == nullptr) return head;

        ListNode* tail = head;
        for(int i=0; i<k; i++)
        {
            if(tail == nullptr) return head;
            tail = tail->next;
        }

        ListNode* dummy = reverse(head, tail);
        head->next = reverseKGroup(tail, k);

        return dummy;
    }
全部评论

相关推荐

03-12 09:57
软件测试
程序员小白条:1)确定测试,测开的方向,技术栈不能写这么少 2)课程凑数的,不是99,100分没必要写 3)实习经历这块要有突出的不是劳动性质的亮点,自己设计的什么方案,什么自动化?什么提效工具?不是一些边角料,人云亦云的东西,没吸引力 4) 校园经历纯没用 5)尽量少写减分项
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务