首页 > 试题广场 >

逆转链表:写一算法逆置带头结点的单链表L,要求逆置后的单链表

[问答题]

逆转链表:写一算法逆置带头结点的单链表L,要求逆置后的单链表利用L中的原结点,不可以重新申请结点空间。

链表结点的生命如下:

template <class Entry>
    struct Node{
    Entry data;
    Node<Entry> *next;
};

请实现下面的函数:

Void reverse(Node<Entry> *L)
Void reverse(Node<Entry> *L) {
    // 原地逆置单向链表
    if (L == NULL) {  // 头节点为空, 直接返回
        return;
    }
    Node<Entry> *p = L->next;  // 工作指针

    if (p == NULL) {  // 只有头节点, 直接返回
        return;
    }

    Node<Entry> *q = p->next;
    if (q == NULL) {  // 只有一个元素, 直接返回
        return;
    }
    p->next = NULL;  // 第一项元素为逆置后的最后一个元素,其next的值为NULL
    Node<Entry> *temp;
    
    while (q) {
        temp = q->next;  // 临时保存q的下一个节点
        q->next = p;  // 翻转指针,由后一个元素指向前一个元素
        p = q;  // 向后移动一个元素
        q = temp;  // 向后移动一个元素
    }
    L->next = p;  // 将头节点指向最后的节点
}

发表于 2017-05-10 23:07:09 回复(0)