分享

请用C/C++实现反转单链表算法

 看风景D人 2014-06-15

#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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多