用C++语言实现逆转线性单链表的算法

用C++语言实现逆转线性单链表的算法简单的小算法
2025-03-21 16:15:46
推荐回答(2个)
回答(1):

转C++STL语言吧,几行代码就搞定

回答(2):

链表的逆转,经过对很多人的代码的学习,我得出了一个目前为止我见过的最简单的算法,贴在下面:

#include 

using namespace std;

struct ListNode {
    int value;
    ListNode *next;
    // 有了c++的构造函数,我们的测试会方便很多。。。
    ListNode(int v): value(v), next(NULL) {}
};

ListNode *reverseList(ListNode *head) {
    // 排除无节点,或只有一个节点的情况
    if (head == NULL || head->next == NULL) {
        return head;
    }

    ListNode *prev = NULL;
    ListNode *cur = head;

    while(cur != NULL) {
        ListNode *next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }

    return prev;
}

// 打印链表
void printList(ListNode *head) {
    while(head) {
        cout << head->value << " -> ";
        head = head->next;
    }
    cout << "NULL" << endl;
}

int main() {
    // 我真的懒得new,所以用数组。感谢c++的构造函数和隐式类型转换!
    ListNode nodes[] = {1,2,3,4,5,6,7,8,9};
    int n = sizeof(nodes)/sizeof(nodes[0]);
    for(int i=0; i        nodes[i].next = &nodes[i+1];
    }

    cout << "原链表:" << endl;
    printList(nodes);
    cout << "逆转后的链表:" << endl;
    printList(reverseList(nodes));
    
    return 0;
}

可以自己用几个栗子跟一下代码,就理解具体的做法了。