C语言解字符串逆序和单向链表逆序问题的代码示例

所属分类: 软件编程 / C 语言 阅读数: 54
收藏 0 赞 0 分享

字符串逆序
上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了。字符串逆序比较简单,直接上代码:

void stringReverse(char* p1,char* p2) 
{ 
 if(p1==p2)return; 
 //swap the value of p1 ,p2 
 *p1=(*p1)+(*p2); 
 *p2=(*p1)-(*p2); 
 *p1=(*p1)-(*p2); 
  if(p1==p2-1)return; 
  else stringReverse(++p1,--p2); 
} 

调用示例:

stringReverse(str,str+strlen(str)-1); 

单向链表逆序
先上三幅图:原始状态是图一,全部逆序之后是图三的样子,图二是逆序一步之后的样子。按照图二的步骤依次往后,每次移动一步,把p1->next 反向,直到全部逆序。详细原理请看代码。
图一:

201666144741552.png (619×144)

图二:

201666144815285.png (619×144)

图三:

201666144831984.png (619×144)

typedef struct Node Node; 
struct Node{ 
 int data; 
 Node* next; 
}; 
 
Node* reverseLinkList(Node* head){ 
 if (head==NULL||head->next==NULL) { 
  return head; 
 } 
 Node* p1 = head; 
 Node* p2 = p1->next; 
 Node* p3 = p2->next; 
 p1->next = NULL;//p1要变成尾指针,所以指向NULL 
 while (p3!=NULL) { 
  p2->next = p1;//p2->next 反向 
  p1=p2;//p1指针向后移动一步 
  p2=p3;//p2指针向后移动一步 
  p3=p3->next;//p3指针向后移动一步 
 } 
 p2->next=p1;//p3指向了NULL,p2反向 
 head=p2;//头指针指向之前的尾指针 
 return head; 
} 

至此结束了。

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多