单链表的前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++(其实我是不怀好意),然后女神 ...
随机推荐
- 图论算法(四)Dijkstra算法
最短路算法(三)Dijkstra算法 PS:因为这两天忙着写GTMD segment_tree,所以博客可能是seg+图论混搭着来,另外segment_tree的基本知识就懒得整理了-- Part 1 ...
- Python-Opencv 轮廓常用操作
Python-Opencv 轮廓常用操作 1.颜色空间转换 使用cv2.cvtColor(input_image ,flag),flag为转换类型 常用的转换类型有: BGR和灰度图的转换使用 cv2 ...
- Centos7修改用户名
系统原来的用户lou,改为scrapy,要改以下个地方,注:没有修改对应密码 1. # vi /etc/passwd 修改其中的用户名部分.用户组部分.主目录部分2. 修改用户组的配置文件 # ...
- Leecode统计子串个数(java)
/** 获取一个字符串在另一个字符串中出现的次数.判断str2在str1中出现的次数 */ public class StringExer2 { public static void main(Str ...
- 团队作业4:第四篇Scrum冲刺博客(歪瑞古德小队)
目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...
- Learning in Spiking Neural Networks by Reinforcement of Stochastic Synaptic Transmission
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Summary 众所周知,化学突触传递是不可靠的过程,但是这种不可靠的函数仍然不清楚.在这里,我考虑这样一个假设,即大脑利用突触传递的随机 ...
- curl报错60的问题
使用curl发请post请求的时候,会遇到如下错误: curl: (60) SSL certificate problem: self signed certificate More details ...
- PAT甲级真题 A1025 PAT Ranking
题目概述:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology o ...
- 兼容低版本IE浏览器的一些心得体会(持续更新)
前言: 近期工作中,突然被要求改别人的代码,其中有一项就是兼容IE低版本浏览器,所以优雅降级吧. 我相信兼容低版本IE是许多前端开发的噩梦,尤其是改别人写的代码,更是痛不欲生. 本文将介绍一些本人兼容 ...
- LoadRunner回放脚本遇到的问题(遇到就补上)
问题一:Error-26612:HTTP Status-code=500(Internal Server Error) 解决过程:google找到了关于这个错误有多种解决的方法,但是都不是我要的,最重 ...