单向链表逆序

一则面试题:写一个方法,讲一个单向链表逆序。


#include <stdio.h> 
#include <stdlib.h>
typedef struct Node 
{
    int data; 
    struct Node *next; 
}Node;

//创建链表
Node *creat(int n)   //n为节点个数
{
    Node *head, *p, *s; 
    int i; 
    p = head = (Node *)malloc(sizeof(Node)); 
    for(i = 1;i <= n;i++) 
    { 
        s = (Node *)malloc(sizeof(Node)); 
        scanf("%d",  &s->data); 
        p->next = s; 
        p = s; 
    } 
    p->next = NULL; 
    return head; 
} 

//原地置换 
void reverse(Node *head)
{    
    Node *p,*s,*t; 
    p = head; 
    s = p->next; 
    //主要置换过程
    while(s->next != NULL) 
    {        
        t = s->next; 
        s->next = p; 
        p = s; 
        s = t; 
    } 
    s->next = p; 
    head->next->next = NULL;  //收尾 
    head->next = s;  //赋头 
} 

//显示链表内容
void display(Node *head) 
{ 
    Node *p; 
    p = head->next; 
    while(p != NULL) 
    {        
        printf("%d ",p->data); 
        p = p->next; 
    } 
    printf("\n"); 
} 
int main() 
{
     int n;
     Node *head; 
     printf("请输入链表节点数:");
     scanf("%d",&n);
     head = creat(n);
     printf("原链表:\n"); 
     display(head); 
     reverse(head); 
     printf("置换后链表:\n"); 
     display(head); 
}

运行:

请输入链表节点数:5
11 22 33 44 55
原链表:
11 22 33 44 55 
置换后链表:
55 44 33 22 11
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,650评论 25 709
  • 链表问题是面试过程中经常被问到的一部分,很考查编程功底。最近刷了 LeetCode 上链表部分的面试题,我总结了一...
    JohnnyShieh阅读 5,008评论 0 9
  • 又到了一周一次的跑江时间。早上7点多钟,起床洗漱,匆匆吃了早饭。看时间还早,便坐在食堂,一边看着小说, 一边等着小...
    fly1a阅读 235评论 0 0
  • 玄武湖旁的雨花茶 抿不下 朱雀桥边的野草花 乌衣巷内的八卦 藏不住 秦淮河畔的喧哗 弓箭坊 颜料坊 不及画舫一曲相...
    麦克不姓麦阅读 185评论 0 0
  • 表单布局 垂直表单(默认) 内联表单 水平表单 垂直表单或基本表单(display:block;) 创建基本表单的...
    小m_up阅读 4,210评论 0 1