PTA数据结构与算法题目集(中文)6-1 单链表逆转

 

  • 非递归实现
List Reverse( List L )
{
    List pre,rear;  // pre指针指向L指针前一项,rear指针记录指针L遍历链表的下一个结点指针
    pre=rear=NULL;  // 初始化
    while (L)
    {
        rear=L->Next;  // 记录L->Next,防止逆转时需要遍历的下一个结点的丢失
        L->Next=pre;  // 逆转链表
        pre=L;  // 更新pre结点
        L=rear;  // 更新L指针到下一个结点
    }
    return pre;  // 遍历完整个列表后,L指向NULL,pre指向新链表的头结点,返回pre
}
  • 递归实现
/* 递归算法的两个重点:
(1):找到出口(何时“归”)
(2):找到问题的相同点,以缩小问题的规模(何时“递”)
List Reverse( List L )
{
    List NewNode;
    if (L==NULL)  // 空链表的情况
        return L;
    else if (L->Next==NULL)  // 递归出口,原链表遍历到头,返回新的头结点
        return L;
    else
    {
        NewNode=Reverse(L->Next); // 递归调用Reverse找到新链表的头结点
        // 在“归”的阶段完成逆转
        L->Next->Next=L;  
        L->Next=NULL;
        return NewNode;  // 返回新的头结点
    }
}

 

你可能感兴趣的:(PTA)