码迷,mamicode.com
首页 > 其他好文 > 详细

逆转单链表

时间:2016-10-30 09:26:06      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:base64   element   span   不能   sel   .net   gif   .com   ase   

    (没有头节点的)其中 List 跟 Position 是结构指针;

typedef struct Node {
    int value;
    struct Node *next;
} *List;
typedef List Position;
List
ReverseList( List L ) {  // Assuming no header.
    if( L == NULL )
        return L;
    Position PreviousPos, CurrentPos, NextPos;
    
    PreviousPos = NULL;
    CurrentPos = L;
    NextPos = L->next;
    while( NextPos != NULL ) {
        CurrentPos->next = PreviousPos;
        PreviousPos = CurrentPos;
        CurrentPos = NextPos;
        NextPos = NextPos->next;
    }
    CurrentPos->next = PreviousPos;
    
    return CurrentPos;
}

 

(有头结点的)下面中开始判断的时候不能用(L == NULL || L->next == NULL) 或( L == NULL && L->next == NULL ) 里面的判断条件必须分开写,至于为什么,仔细想想应该就清楚了。

List
ReverseList( List L ) {  // Assumed header
    if( L == NULL )
        return L;
    if( L->next == NULL )
        return L;
    Position PreviousPos, CurrentPos, NextPos;
    
    PreviousPos = NULL;
    CurrentPos = L->next;
    NextPos = CurrentPos->next;
    while( NextPos != NULL ) {
        CurrentPos->next = PreviousPos;
        PreviousPos = CurrentPos;
        CurrentPos = NextPos;
        NextPos = NextPos->next;
    }
    CurrentPos->next = NextPos;
    L->next = CurrentPos;
    
    return L;
}

 

    (下面来个递归实现的,这个递归实现的方法参考自:

    ( http://blog.163.com/lichunliang1988116@126/blog/static/26599443201282083655446/ )

 

     不过他的递归实现的代码是错误的。

         

技术分享

        p1 和p2指针分别指向当前递归子链表list1的第一个和第二结点。然后对以p2为首结点的子链表list2进行递归逆转;则p2节点将成为list2r逆转后的尾结点,而此时函数返回的头结点将是原list2的尾结点(如下图)。最后我们只要把p2的next指向p1就OK了。

技术分享

下面是改正后的代码

List
ReverseList( List L ) {   // Assuming no header
    if( L == NULL )
        return L;
    if( L->next == NULL )
        return L;
        
    Position p1, p2;
    
    p1 = L;
    p2 = p1->next;
    L = ReverseList( p2 );
    p2->next = p1;
    p1->next = NULL;
    
    return L;
}

 

 
技术分享

逆转单链表

标签:base64   element   span   不能   sel   .net   gif   .com   ase   

原文地址:http://www.cnblogs.com/wanghuizhao/p/6012437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!