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

#define  NR(x)   (sizeof(x)/sizeof(x[0]))

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

void top_append_list(struct node *head , int value);
void print_link(struct node head);
void tail_append_list(struct node *head , int value);
int  delete_link_node(struct node *head , int number);
int  sort_link_node(struct node *head , int flag );    //flag = 1  s->b   0  b->s
void turn_over_node(struct node *head);

int main(void)
{
	int array[] = {1,2,5,4,3,8,7,6,9};

	struct node head = {.next = NULL} ;
	struct node *headp ; 

	int i ;
	for(i = 0 ; i < NR(array) ; i++)
	{
		tail_append_list(&head , array[i]);
	}

	print_link(head);
	int num ;
	sort_link_node(&head , 1);
	print_link(head);

	//b -> s
	sort_link_node(&head , 0);
	print_link(head);

	turn_over_node(&head);
	print_link(head);

	return 0 ;
}

void top_append_list(struct node *head , int value)
{
	struct node *New = NULL ;
	New = malloc(sizeof(struct node));
	if(NULL == New){
		fprintf(stderr , "分配失败!\n");
		return ;
	}	

	New->data = value ; 

	New->next = head->next ;
	head->next = New ;
}

void print_link(struct node head)
{
	struct node *tmp = head.next ;
	while(tmp)
	{
		printf("%d " , tmp->data);
		tmp = tmp->next ;
	}
	putchar('\n');
}
void tail_append_list(struct node *head , int value)
{
	struct node *New = NULL ; 

	New = malloc(sizeof(struct node ));
	if(NULL == New){
		fprintf(stderr , "分配失败!\n");
		return ;
	}
	New->data = value ;
	struct node *tmp = head ;
	while(tmp->next && (tmp = tmp->next)) ; 

	New->next = tmp->next ;
	tmp->next = New ;
}

int  delete_link_node(struct node *head , int number)
{
	struct node *after = head->next , *before = head;
	int flag = 0 ;
	while(after)
	{
		if(after->data == number)
		{
			flag = 1 ;
			before->next = after->next ;
			after->next = NULL ;
			free(after);
			after = before->next ;
			continue ;
		}
		after = after->next;
		before = before->next ;
	}
	return flag ;
}

int  sort_link_node(struct node *head , int flag )    //flag = 1  s->b   0  b->s
{
	int tmp ; 

	struct node *tmp1 , *tmp2 ; 

	tmp1 = head ;
	while(tmp1 = tmp1->next)
	{
		tmp2 = tmp1->next ;
		while(tmp2)
		{
			if((flag==1)?(tmp1->data > tmp2->data):(tmp1->data < tmp2->data))
			{
				memcpy(&tmp , &tmp1->data , sizeof(int));
				memcpy(&tmp1->data , &tmp2->data , sizeof(int));
				memcpy(&tmp2->data , &tmp , sizeof(int));
			}
			tmp2 = tmp2->next ;
		}
	}

}

void turn_over_node(struct node *head)
{
	struct node *tmp = head->next ;
	struct node *cur = NULL;
	head->next = NULL ; 

	while(cur = tmp)
	{
		tmp = tmp->next ;
		cur->next = head->next ;
		head->next = cur ;
	}
}

史上最简单的C语言链表实现,没有之一的更多相关文章

  1. 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。

    重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView. ...

  2. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

  3. 史上最简单的 SpringCloud 教程

    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...

  4. 史上最简单的 SpringCloud 教程 | 终章

    https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...

  5. 史上最简单的 GitHub 教程

    史上最简单的 GitHub 教程 温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「github-tutorial」进行Star和Fork操作! 1 简介 GitHub 是一个面 ...

  6. (转) 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  7. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)

    转载请标明出处: 原文首发于 https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f10-eureka/ 本文出自方志朋的博客 文章 史上最简单 ...

  8. 史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」

    自动增长 自动增长:auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值. 自增 ...

  9. 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/ 本文出自方志朋的博客 一.spring ...

随机推荐

  1. Eclipse打jar包,资源文件的读取

    最近的工作中需要将java程序打一个jar包,然后在Linux中供调用.程序中需要读取一个配置文件.遇到了三个问题.第一个是依赖的第三方Jar包打成Jar包后找不到:第二个问题是资源文件所在的文件夹打 ...

  2. Linux proc/pid/task/tid/stat文件详解

    [root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 419 ...

  3. iOS开发之Xcode常用调试(Debug)技巧总结

    一.Xcode调试技巧之:NSLog 上面也提到了,在我们日常的开发过程中最常见的Debug方式就是打Log.而在OC语言中,打Log是采用NSLog方法.但是NSLog效率低下,具体原因可以看这篇博 ...

  4. shell的输入和输出

    1.echo    echo [option] string -e 解析转义字符 -n 回车不换行,linux系统默认回车换行 转移字符 \c \t \f \n #!/bin/bash #echo e ...

  5. Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)

    我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观. 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求 ...

  6. Servlet之Request对象

    下面的方法可用在 Servlet 程序中读取 HTTP 头.这些方法通过HttpServletRequest 对象可用. 1    Cookie[] getCookies() 返回一个数组,包含客户端 ...

  7. RecyclerView下拉刷新上拉加载(二)

    listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561 listview下拉刷新上拉加载扩 ...

  8. TortoiseSVN服务器ip地址修改后如何使用

    TortoiseSVN是很多人特别是程序员经常使用的工作追述工具,在长期使用过程中难免会遇到服务器迁移ip地址变更的问题.那么在服务器ip地址变化之后,我们要如何继续使用呢?步骤其实非常简单,下面我们 ...

  9. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

  10. Html标签中thead、tbody、tfoot的作用

    Html标签中thead.tbody.tfoot的作用 为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析HTML时,table是作为一个整体解释的,使用TBODY可以优化显示. ...