反转链表



面试题16:反转链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后该链表的头结点,链表定义如下:

Struct ListNode

{

   Int      M_nKey

   ListNode* m_pNext

}

我的代码如下:

#include<stdio.h>

#include<assert.h>

#include<stdlib.h>

 

typedef struct Node

{

    int data;//数据域

    struct Node *next;//指向下一个节点的地址

}Node,*List;//List== Node *

 

 

//单链表以NULL结尾

void InitList(Listplist)

{

    assert(plist != NULL);

    if(plist == NULL)

    {

       return;

    }

 

    plist->next = NULL;

}

 

ListBuyNode(int val)

{

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

 

    p->data = val;

    //p->next = NULL;

 

    return p;

}

 

//头插

void Insert_Head(Listplist ,int val) 

{

    Node *p = BuyNode(val);

   

    p->next = plist->next;//4

    plist->next = p;//3

}

 

 

//从头到尾打印链表

void Show(List plist)

{

    Node*p=plist->next;

    for( ; p!= NULL ;p=p->next)

    {

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

    }

    printf("\n");

}

 

void Reverse(List plist)

{

    Node *p1=NULL;

    Node *p2=plist;

    Node *p3=NULL;

 

    while(p2->next != NULL)

    {

       Node *tmp=p2->next;

      

       if(tmp== NULL)

       {

           p1= p2;

       }

 

       p3=p2;

       p2=tmp;

    }

}

 

 

int main()

{

    Node plist1;

    plist1.next=NULL;

    int i=0;

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

    {

       Insert_Head(&plist1 ,i);

    }

 

    Reverse(&plist1);

    Show(&plist1);

 

    return 0;

}     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值