单链表倒置

单链表倒置,想要倒置应先整理一下倒置的思路,应先知道链表分为几种:

1.单链表:单链表的任意的一个结点只有一个数据域 ,一个指针域(数据域存储数据,指针域存储下一个结点的头指针),结构如下:

typedef struct node
{
int data;
struct node *link;
}LinkList;

2.双向链表:在双向链表中它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱,数据域存储数据。结构如下:

typedef struct doubleNode  
{  
    int data;  
    struct  doubleNode* prev;  
    struct  doubleNode* next;  
}DoubleNode;


3循环链表:最后一个结点的指针域指向头结点,整个链表形成一个环

链表倒置思路如下:

第一,先创建一个链表;创建链表需要先创建结点,结点的创建如下:

typedef struct node
{
int data;
struct node *link;
}LinkList;

链表创建如下:

Node *CreatList(void)

{

    int firtData, i, n;

    Node *phead, *p =NULL, *q =NULL;

    

    phead =NULL;

    printf("请输入您要建立的链表长度:\n");

    scanf("%d", &n);

    printf("请输入您要输入的数据:\n");

//将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新  

//节点接到表尾,其中phead中保存的是第一次创建空链表的地址。   


    for(i=0; i<n; ++i)

    {

        scanf("%d", &firtData);

        p = (Node *)malloc(sizeof(Node));

        p->data =firtData;

        if(NULL == phead)

            q = phead = p;/*空表,接入表头*/

        else

            q->next = p;/*非空表,接到表尾*/

        q = p;//这个起着指向下一个结点的作用

    }

    p->next =NULL;//最后将最后一个结点的指针域清空了

    return phead;//返回这个链表的首地址

}

第二,链表的倒置

Node *ReverseList(Node *phead)

{

    Node *p, *q, *r;

    

    p = phead;

    q=r=NULL;

    

    while(p)

    {

        q = p->next;//获取链表的第二个结点

        p->next = r;//将头链表的下一个结点置为NULL

        r = p;//将头结点的地址赋给r

        p = q;//将第二个结点的地址赋值给p

    }

    return r;

}

第三,输出倒置后的链表

void ShowList(Node *phead)

{

    Node *p;

    

    p = phead;

    while(p)

    {

        printf("%d ", p->data);

        p = p->next;

    }

    printf("\n");

}

 

 

int main(void)

{

    Node *phead;

    

    phead =CreatList();

    printf("链表逆置前的数据:\n");

    ShowList(phead);

    

    phead =ReverseList(phead);

    

    printf("链表逆置后的数据:\n");

    ShowList(phead);

    

    return 0;

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值