D1 反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=117&rp=1&ru=%2Fexam%2Fcompany&qru=%2Fexam%2Fcompany&sourceUrl=%2Fexam%2Fcompany&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu

要点

  1. 三指针遍历链表,进行反转
  2. ACM模式下输入用getchar来吞掉空格

代码:


#include <iostream>
#include <vector>

using namespace std;

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

ListNode* ReverseList(ListNode* head) {
    // write code here
    ListNode* pre, * cur, * ne;
    pre = NULL;
    cur = head;
    ne = head->next;
    while (cur) {
        cur->next = pre;
        pre = cur;
        cur = ne;
        if(ne) ne = ne->next;
    }
    return pre;
}

void CreateList(vector<int>& nums, ListNode* head) {
    ListNode* r = head;
    for (int num : nums) {
        ListNode* new_node = new ListNode(num);
        r->next = new_node;
        r = r->next;
    }
    r->next = nullptr;
    return;
}

void print(ListNode* head) {
    ListNode* cur = head;
    while (cur) {
        if (cur->next)
            cout << cur->val << ' ';
        else
            cout << cur->val;
        cur = cur->next;
    }
    return;
}

int main() {
    vector<int> nums;
    int n;
    while (cin >> n) {
        nums.push_back(n);
        if (getchar() == '\n') {
            break;
        }
    }
    ListNode* head = new ListNode();    
    CreateList(nums, head);
    //print(head);
    ListNode* res = ReverseList(head->next);
    print(res);
    return 0;
}
posted @   xiazichengxi  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩