C/C++笔试经典——链表倒序
来源:互联网 发布:ms sql server 版本 编辑:程序博客网 时间:2024/06/06 08:04
设链表节点为:
typedef struct tagListNode{ int data; struct tagListNode* next;}ListNode, *List;
要求将一带链表头List head的单向链表逆序。
分析:
1). 若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
示例:以逆序A->B->C->D为例,图示如下
实现及测试代码如下:
#include <stdio.h>#include <stdlib.h>typedef struct tagListNode{ int data; struct tagListNode* next;}ListNode, *List;void PrintList(List head);List ReverseList(List head);int main(){ //分配链表头结点 ListNode *head; head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; head->data = -1; //将[1,10]加入链表 int i; ListNode *p, *q; p = head; for(int i = 1; i <= 10; i++) { q = (ListNode *)malloc(sizeof(ListNode)); q->data = i; q->next = NULL; p->next = q; p = q; } PrintList(head); /*输出原始链表*/ head = ReverseList(head); /*逆序链表*/ PrintList(head); /*输出逆序后的链表*/ return 0;}List ReverseList(List head){ if(head->next == NULL || head->next->next == NULL) { return head; /*链表为空或只有一个元素则直接返回*/ } ListNode *t = NULL, *p = head->next, *q = head->next->next; while(q != NULL) { t = q->next; q->next = p; p = q; q = t; } /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/ head->next->next = NULL; /*设置链表尾*/ head->next = p; /*调整链表头*/ return head;}void PrintList(List head){ ListNode* p = head->next; while(p != NULL) { printf("%d ", p->data); p = p->next; } printf("/n");}
来自:http://blog.csdn.net/niuer09/article/details/5961004
1 0
- C/C++笔试经典——链表倒序
- 笔试经典题之链表倒序
- C链表倒序
- C语言 单向链表倒序
- c语言入门—数字倒序
- c/c++ 经典笔试
- C++经典算法————链表倒序
- C/C++经典笔试题
- 经典c语言笔试题
- 经典嵌入式C笔试题
- C/C++经典笔试题
- C/C++笔试经典题目
- C/C++经典笔试题
- 笔试面试之倒序输出链表
- [C]将原有链表中的元素倒序输出
- C语言 (单)链表的倒序实现
- C语言编程之——倒序的三位数
- 倒序排列字符串 - C
- 《老罗Android》监听电量变化、Broadcast实现开机启动
- 将vimdiff作为svn di默认的编辑工具
- 查看apache版本-命令
- 如何学好C语言[转载]
- POJ-3190-Stall Reservations
- C/C++笔试经典——链表倒序
- 归并排序之逆序对
- 瑞柏匡丞:如何正确应对移动互联带来的影响
- Linux下禁止ping最简单的方法
- NumberUtils用法
- 介绍ireport两种获取数据源的方法,javabean和sql
- javascript DOM模型
- js分页类似淘宝
- 网路通信学习札记