分类: C/C++2010-10-23 17:23 18425人阅读 评论(22) 收藏 举报

设链表节点为

  1. typedef struct tagListNode{
  2. int data;
  3. struct tagListNode* next;
  4. }ListNode, *List;

要求将一带链表头List head的单向链表逆序。

分析:

1). 若链表为空或只有一个元素,则直接返回;

2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;

3). 重复2),直到q为空

4). 调整链表头和链表尾

示例:以逆序A->B->C->D为例,图示如下

实现及测试代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct tagListNode{
  4. int data;
  5. struct tagListNode* next;
  6. }ListNode, *List;
  7. void PrintList(List head);
  8. List ReverseList(List head);
  9. int main()
  10. {
  11. //分配链表头结点
  12. ListNode *head;
  13. head = (ListNode*)malloc(sizeof(ListNode));
  14. head->next = NULL;
  15. head->data = -1;
  16. //将[1,10]加入链表
  17. int i;
  18. ListNode *p, *q;
  19. p = head;
  20. for(int i = 1; i <= 10; i++)
  21. {
  22. q = (ListNode *)malloc(sizeof(ListNode));
  23. q->data = i;
  24. q->next = NULL;
  25. p->next = q;
  26. p = q;
  27. }
  28. PrintList(head);           /*输出原始链表*/
  29. head = ReverseList(head);  /*逆序链表*/
  30. PrintList(head);           /*输出逆序后的链表*/
  31. return 0;
  32. }
  33. List ReverseList(List head)
  34. {
  35. if(head->next == NULL || head->next->next == NULL)
  36. {
  37. return head;   /*链表为空或只有一个元素则直接返回*/
  38. }
  39. ListNode *t = NULL,
  40. *p = head->next,
  41. *q = head->next->next;
  42. while(q != NULL)
  43. {
  44. t = q->next;
  45. q->next = p;
  46. p = q;
  47. q = t;
  48. }
  49. /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
  50. head->next->next = NULL;  /*设置链表尾*/
  51. head->next = p;           /*调整链表头*/
  52. return head;
  53. }
  54. void PrintList(List head)
  55. {
  56. ListNode* p = head->next;
  57. while(p != NULL)
  58. {
  59. printf("%d ", p->data);
  60. p = p->next;
  61. }
  62. printf("/n");
  63. }

ZT 链表逆序的更多相关文章

  1. Reverse Linked List II 单向链表逆序(部分逆序)

    0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...

  2. 链表逆序(JAVA实现)

    题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回: 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继: 重复步骤2,直到q为空: 调整链表头和链表尾: 图 ...

  3. 链表逆序,java实现

    package com.cskaoyan.linkedlist; //反转数组 public class LinkedListDemo2 { public static Node reverse(No ...

  4. C# 单向链表 逆序(递归)

    static void Main(string[] args) { while (true) { LinkedList L = new LinkedList(); L.Add(new Node(&qu ...

  5. 链表逆序---python

    class ListNode: Value = '' # 节点要储存的值,因为Python是弱类型,因此无需传入泛型 Next = None # 下一个节点,初始化时为空值 def __init__( ...

  6. 剑指Offer03 逆序输出链表&链表逆序

    多写了个逆序链表 /************************************************************************* > File Name: ...

  7. 基于visual Studio2013解决面试题之0504单链表逆序

     题目

  8. 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)

    如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...

  9. C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素

    #include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...

随机推荐

  1. HTTP报文(面试会问开发时常用的报文头格式)

    (本文的解释是完整的,ajax把很多东西封装了) HTTP有两类报文:请求报文和响应报文. HTTP请求报文 一个HTTP请求报文由请求行(request line).请求头部(header).空行和 ...

  2. SpringBoot(八) Caching (更新中...)

    缓存配置 在springboot的主类添加注解@EnableCaching启用缓存支持 参考文档 33. Caching spring framework >>> 8. Cache ...

  3. 《码出高效 Java开发手册》第六章 数据结构与集合

    码云: https://gitee.com/forxiaoming/JavaBaseCode/blob/master/EasyCoding/src/collection/index.md 6.1 数据 ...

  4. Python标准模块--concurrent.futures 进程池线程池终极用法

    concurrent.futures 这个模块是异步调用的机制concurrent.futures 提交任务都是用submitfor + submit 多个任务的提交shutdown 是等效于Pool ...

  5. mysql + excel 校正线上数据

    积分问题处理 1. 所有应补汇总 select driver_id, SUM(integral) from detail_score group by driver_id; 2. 原汇总积分 sele ...

  6. 黑客之google入侵网站常用方式 2

    一: 在搜索框上输入: “index of/ ” inurl:lib 再按搜索你将进入许多图书馆,并且一定能下载自己喜欢的书籍. 在搜索框上输入: “index of /” cnki 再按搜索你就可以 ...

  7. Qt编译目录下exe文件执行报错问题的解决办法

    使用Qt5.9.3+vs2017环境,编译项目生成Debug目录,运行其中的exe文件,出现以下错误(qt creator调试状态下或出安装包后是可以运行的): 经过查阅资料,发现是我重新配置Qt开发 ...

  8. 关于Datastage资料库的一点小发现

    这里的资料库,指的是Datastage Metadata层,在Datastage7.5以后,需要在安装Datastage时安装一个数据库用于存放用户数据. 昨天领导要求安装Datastage集群/高可 ...

  9. 润乾V4报表放入WEBINF保护目录下如何实现

     润乾报表放入WEBINF保护目录下如何实现 WEB-INF下面的文件都是受保护的,客户为了保护项目的文件不受到非法的访问,jsp页面都放在WEB-INF下,那润乾报表放入WEB-INF保护目录下 ...

  10. linux 用户管理命令useradd、passwd、who、whoami、id、w及创建用户默认值文件

    useradd /usr/sbin/useradd执行权限:rootuseradd [选项] 用户名-u UID:手工指定用户的UID号-d 家目录:手工指定用户的家目录-c 用户说明:手工指定用户的 ...