c语言-C语言中单向的链表反转

问题描述

C语言中单向的链表反转

node* reverse1(node * head)
{
node*p,*q,*r;
p = head;

q = head->next;

head->next = NULL;
while(q){

r = q->next;

q->next = p;

p = q;

q = r;
}

head=p;
/* while(p)
{
printf("%d ",p->num);
p=p->next;
}*/
printf("
");
return head;

}

解决方案

#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
        int data;
        struct _node *next;
} node;

node*
reverse1(node * head)
{
        node*p,*q,*r;

        if( head != NULL )
        {
                p = head;
                q = head->next;

                head->next = NULL;
                while(q){
                        r = q->next;
                        q->next = p;

                        p = q;
                        q = r;
                }

                head=p;
        }
        return head;
}

int
main( void )
{
        node *link = NULL;
        node *tmp = NULL;
        int i = 0;

        for( i = 0; i < 5; i++ )
        {
                tmp = malloc( sizeof( node ) );
                if( tmp == NULL )
                        return -1;

                tmp->data = i;
                tmp->next = link;
                link = tmp;
        }

        tmp = link;
        printf( "before reversal:
" );
        while( tmp )
        {
                printf( "%d ", tmp->data );
                tmp = tmp->next;
        }
        putchar( '
' );

        link = reverse1( link );
        printf( "after reversal:
" );
        tmp = link;
        while( tmp )
        {
                printf( "%d ", tmp->data );
                tmp = tmp->next;
        }
        putchar( '
' );

        return 0;
}

测了一下,应该可以使吧

解决方案二:

示意图

代码实现

[cpp]?view
plaincopy

#include<stdio.h>??
???
struct?ListNode{??
????int&nb......
答案就在这里:C 单向链表反转
----------------------

时间: 2024-08-01 02:58:56

c语言-C语言中单向的链表反转的相关文章

c语言-C语言中单向的链表反转?

问题描述 C语言中单向的链表反转? 这段代码实在看不懂啊,求解 Linklist *reverse(Linklist *head) //链表逆置 { Linklist *p,*t; p=head->next; t=p->next; p->next=NULL; while(t!=NULL) { p=t->next; t->next=head->next; head->next=t; t=p; } return head; } 其中之一:while中第二句head-&

编程c语言-vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表

问题描述 vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表 这样定义对么 编译时报错 缺少:在*前面 这是哪错了啊 请高手指点指点 解决方案 你把两个结构体的定义调换一下次序就没问题啦,要先声明或定义结构体:Station,才能使用 解决方案二: 因为struct Station是在struct Train结构体之后才定义的,所以你要在这之前先声明一下struct Train 解决方案三: 做一个前向声明,或者调换两个结构位置都可以. 解决方案四: 结构体数组

修改内容-C语言修改文件中某一行

问题描述 C语言修改文件中某一行 RT,在vc2010下,做的学生管理系统.没有采用链表. 已经找到所要修改的行,并且修改成功,在内存中已经看到修改后的结果,并用fflush写回文件. 但是文件就是没有改变,上代码,求帮助,已经卡在这一天半了. #include"head_1.h" void change_stu(int id,char name[20],float score) { FILE *fp2; char str[20]; char a[20]; int ch2; int i

图节点删除-C语言 删除图中制定的节点

问题描述 C语言 删除图中制定的节点 /*/////////////////////////////////////////////////////////////*/ /* 图的深度优先遍历 / //////////////////////////////////////////////////////////////*/ #include #include struct node /* 图顶点结构定义 / { int vertex; / 顶点数据信息 / struct node *nextn

指针-C语言 多项式加法中的问题

问题描述 C语言 多项式加法中的问题 不知道结果为什么出错,怎么也找不出来 #include #include struct PolyNode{ int coef; //系数 int expon; //指数 struct PolyNode *link;//指向下一个节点的指针 }; typedef struct PolyNode *Polynomial; Polynomial P1, P2, P3, P4,P5; void Attach(int c, int e, Polynomial *pRe

c语言编程-如何用C语言实现linux中的ll命令?

问题描述 如何用C语言实现linux中的ll命令? 如何用C语言实现linux中的ll命令?大师能给个完整的代码吗?最好有些注释.(我C语言学的不怎么好,害怕看不懂.) 解决方案 C语言实现的linux下ls命令linux "ll" 命令实现在Linux中, 用C语言简单实现chmod命令 解决方案二: 获取文件属性:http://www.cnblogs.com/hnrainll/archive/2011/05/11/2043361.html 遍历文件夹:http://blog.csd

android-java语言 安卓开发中的问题

问题描述 java语言 安卓开发中的问题 Pattern ptn=Pattern.compile("[(d{2}:d{2}.d{2})]"): Matcher mtn=ptn.matcher(line): 这两句是什么意思? 解决方案 正则表达式,匹配 [11:22.33]这样的字符串,d{2}表示2位数字. 解决方案二: Java语言是一种支持多线程的语言,它通过同步(互斥)和协作(等待和唤醒)来完成.这里聊聊同步. ? 线程不安全主要来自于类变量(静态变量)和实例变量,前者位于方法

c语言问题-c语言 fun函数中的for语句中的小*为啥不能输出如何解决

问题描述 c语言 fun函数中的for语句中的小*为啥不能输出如何解决 #include void fun(char a) { int n=0,i=0; char *p=a; while(*p=='') { p++; n++; } while(*p!='/0') { a[i++]=*p; p++; } for(;n>0;n--) { a[i++]='*'; } a[i]=0; } main() {char s[81]; int n=0; void NONO (); printf("Ente

c语言-C语言在函数中调用指数组的问题

问题描述 C语言在函数中调用指数组的问题 #include <stdio.h> int i=5; void output_array ( int array[] ){ int a; for ( a=0; a<i; a++ ){ printf ( "%i%s", &array[a], "t" ); //warning: format specifies type 'int' but the argument has type 'int *'