to myself 的分类学习日志

做自己想做的事
posts - 232, comments - 6, trackbacks - 0, articles - 0

反转单链表

Posted on 2010-10-13 22:12 kongkongzi 阅读(221) 评论(0)  编辑 收藏 引用 所属分类: c programming

 

#include <iostream>

struct Node
{
    
int id;
    
struct Node *pNext;
};
typedef 
struct Node *Link; // 需要typedef,否则同时定义多个指针的时候不能写在同一行。

void reverseList(Link *ppHead) // 需要传递头节点的指针的地址,这是为了修改这个值。
{
    Link p 
= *ppHead;
    Link q, r; 
// <=> Node *q, *r;
    q = p->pNext;
    p
->pNext = NULL;
    
while (q != NULL)
    {
        r 
= q->pNext; // 需要预先保存第三个节点的位置。

        q
->pNext = p;

        p 
= q; // 把p,q 同时往后移一个位置。
        q = r;
    }
    
*ppHead = p;
}

void printList(const Link pHead)
{
    Link p 
= pHead;
    
while (p != NULL)
    {
        std::cout 
<< p->id << " ";

        p 
= p->pNext;
    }

    std::cout 
<< std::endl;
}

int main(void)
{
    Link pHead, pPrev, pNext;
    pHead 
= new Node;
    pHead
->id = 1;
    pHead
->pNext = NULL;
    pPrev 
= pHead;
    
for (int i = 1; i < 5; i++)
    {
        pNext 
= new Node;
        pNext
->id = i + 1;
        pNext
->pNext = NULL;
        
        pPrev
->pNext = pNext;
        pPrev 
= pNext;
    }

    printList(pHead);

    reverseList(
&pHead);

    printList(pHead);

    
return 0;
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理