笔试/面试/刷题必备:ACM模式链表输入输出模板(直接复制可用)

一些笔试的时候,有ACM模式输入输出链表的情景,怎么处理它的输入输出,转换成我们熟悉的模式?

例如

反转链表

输入:1->2->3->NULL

输出:3->2->1->NULL

这里以C++为例子,用简单的方式,教你处理链表的输入输出!!!

先定义链表

struct ListNode {
    int val;
    ListNode *next;
    ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
};

思路:对于输入1->2->3->NULL,用一个字符串s处理输入,然后把s中的数字分离出来,存入vector中,通过这个vector来构建链表。

//把链表输入形式中的数字,纳入vector中
vector<int> CreateVector(const string& s){
    vector<int> res;
    string numStr;  // 临时存储拼接的数字字符串

    for (char c : s) {  // 遍历字符串的每个字符
        if (isdigit(c)) {   // 判断是否是数字
            numStr += c;    // 拼接数字字符
        } else {
            // 遇到非数字,且之前有拼接好的数字字符串
            if (!numStr.empty()) {
                res.push_back(stoi(numStr));  // 转int存入
                numStr.clear();  // 重置,准备下一个数字
            }
        }
    }

    // 处理字符串末尾的数字(比如 "1->2->3" 最后一个3,遍历结束后未存入)
    if (!numStr.empty()) {
        res.push_back(stoi(numStr));
    }
   
    return res;
}


//通过vector构建链表
ListNode* CreateListNode(const vector<int>& nums){
    ListNode* dummyHead=new ListNode();
    ListNode* curr=dummyHead;

    for(int v:nums){
        ListNode* tem=new ListNode(v);
        curr->next=tem;
        curr=curr->next;
    }

    return dummyHead->next;
}

int main(){
    string s;
    getline(cin,s);

    //构建出我们常用的链表
    ListNode* head=CreateListNode(CreateVector(s));

    //...后续使用
}

打印链表,输出格式为:1->2->3->NULL

// 打印链表(格式:1->2->3->NULL)
void printList(ListNode* head) {
    ListNode* curr = head;
    while (curr != nullptr) {
        cout << curr->val;
        if (curr->next != nullptr) {
            cout << "->";
        }
        curr = curr->next;
    }
    cout << "->NULL" << endl; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值