单链表的前K个的逆序输出
单链表逆序输出也是常被面试官问到题算法题,所以自己就总结了一下,在此贴出算法,与小伙伴们相互交流。
首先要有三个指针,前两个分别指向首节点,首节点的下一个节点,第三个是临时指针,是为了储存首节点的下一个节点的下一个节点,防止链表断裂
图1
输出函数一共两个参数,第一个是链表本身,第二是K值
首先让new等于头结点的next节点,old为new结点的next节点
为了让逆序输出,必须定义一个计数器count,count初值为1,用于终止循环的条件。
每次循环,必须先指定temp节点为old的next节点(temp=old->next),再将old的指针指向的节点改为new(old->next=new),再将new节点向右移动为old原来的位置(new=old),再将old节点向右移动为temp的位置(old=temp),并将count++,当count=k时跳出循环
图2
跳出循环时,先将head的next的next(也就是1节点的next)指向old,再将head指向new,不能调换顺序,就完成了逆序
图3
代码如下所示
#include <stdio.h>
#include <malloc.h>
/*链表节点结构*/
typedef struct node{
int data;
struct node * pNext;
}NODE,*PNODE;
/*函数声明*/
PNODE create_list();
void show_list(PNODE p);
void show_list_list(PNODE p);
PNODE reversedOrder(PNODE p ,int k);
/*主函数*/
int main(){
int k;
int len;
PNODE pHead=NULL;
pHead=create_list();
show_list(pHead);
len=show_list_length(pHead);
printf("\n%d\n",len);
reversedOrder(pHead,);
show_list(pHead);
return ;
}
/*生产链表*/
PNODE create_list(void){
int len;
int val;
int i;
scanf("%d\n",&len);
PNODE pHead=(PNODE)malloc(sizeof(NODE));
if(pHead==NULL){
printf("error");
}
PNODE pTail=pHead;
pTail->pNext=NULL;
for(i=;i<len;i++){
scanf("%d",&val);
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew==NULL){
printf("error");
}
pNew->data=val;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return pHead;
}
/*显示链表*/
void show_list(PNODE p){
PNODE p1=p->pNext;
if(p1==NULL){
printf("error");
}
while(p1){
printf("%d",p1->data);
p1=p1->pNext;
}
}
/*显示链表长度*/
int show_list_length(PNODE p){
int count=;
PNODE p1=p->pNext;
if(p1==NULL){
printf("error");
}
while(p1){
count++;
p1=p1->pNext;
}
return count;
}
/*逆序*/
PNODE reversedOrder(PNODE p,int k){
int count=;
PNODE oNew=p->pNext;
PNODE old=oNew->pNext;
while(count<k){
PNODE temp=old->pNext;
old->pNext=oNew;
oNew=old;
old=temp;
count++;
} p->pNext->pNext=old;
p->pNext=oNew;
//return oNew;
}
测试结果:
图4
这就是我对逆序的理解。
单链表的前K个的逆序输出的更多相关文章
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- 【链表问题】打卡9:将单链表的每K个节点之间逆序
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...
- 将单链表的每K个节点之间逆序
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明, ...
- 栈和队列----将单链表的每K个节点之间逆序
将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个. 例如: 链表:1—>2—>3 ...
- 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...
- C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
//将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...
- 剑指Offer03 逆序输出链表&链表逆序
多写了个逆序链表 /************************************************************************* > File Name: ...
- 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列
1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输 ...
- C++关于数字逆序输出的两种思路,及字符串逆序输出
C++关于数字逆序输出的两种思路,及字符串逆序输出 作者:GREATCOFFEE 发布时间:NOVEMBER 15, 2012 分类:编程的艺术 最近在跟女神一起学C++(其实我是不怀好意),然后女神 ...
随机推荐
- Nginx同时支持Http和Https
现在的网站支持Https几乎是标配功能,Nginx能很好的支持Https功能.下面列举一个配置同时支持Http和Https的功能. 需要注意的是:既然选择使用Https,就是为了保证通信安全,那么就没 ...
- Open MPI 4.0 编译安装
电脑上目前使用的mpi环境是2.1.1版本的openmpi,是我之前直接使用系统的包管理工具安装的.但是系统包版本一般都比较老旧,现在openmpi最新版已经出到了4.0,即将出4.1了,所以我打算升 ...
- Reliable Federated Learning for Mobile Networks
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文. arXiv: 1910.06837v1 [cs.CR] 14 Oct 2019 Abst ...
- 宝塔,一个免费好用的 Linux/Windows 服务器管理面板
宝塔面板是什么? 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率.例如:创建管理网站.FTP.数据库,拥有可视化文件管理器,可视化软件管 ...
- 更换git远程仓库地址
通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...
- Http请求-okhttp3基本用法
简介 HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽.OkHttp是一个高效的HTTP客户端,它有以下默认特性: 支持HTTP/2,允许所有同一个主 ...
- 尝试写一写4gl与4fd
4gl DATABASE ds GLOBALS "../../config/top.global" DEFINE g_curs_index LIKE t ...
- 项目介入EF Core
目前.Net主流的ORM有SqlSugar.Entity Framework.Dapper,其它的我就不列举了.其实和Java那边ibatis相比,他们都比较轻量.之前用ibatis开发,真的很麻烦, ...
- 创建一个springbootcloud项目
nacos:服务治理 fegin:负载均衡 sentinel:分布式系统的流量防卫兵 sleuth+zipkin:链路追踪 前提软件安装 nacos: github下载地址:https://githu ...
- NOR Flash 与 NAND Flash 的区别
闪速存储器 闪速(Flash)存储器是一种电可擦除可多次编程的存储器.工艺上主要有两类:或非(NOR)型阵列和与非(NAND)型阵列. 项目 读取速度 写入速度 擦除速度 特性 其他 NOR Flas ...