01_链表的翻转(C语言)
来源:互联网 发布:雪梨淘宝店名叫什么 编辑:程序博客网 时间:2024/06/11 04:24
本题讲的基于单链表的操作。
在操作链表的时候一定要记住:链表的删除和添加元素是非常灵活的。在适当的地方(1)断开指针连接,(2)拼接指针连接。
单链表的删除操作:
如图所示:假如一直节点5的地址为 p ,现在要删除结点7,则需要做如下步骤:
(1)由于在创建链表的时候,为每个节点都用 malloc 函数分配了内存,所以在是删除节点的时候需要释放内存。
定义一个节点 q 用来保存即将删除的节点。 q = p->next ;
(2)将节点4 连接在 节点5 的后面,这样这样就自动的将节点7删掉了。
p->next = q->next ;
(3)释放节点7 的内存。 free(q);
单链表的添加操作:
如图所示:假如要在节点5 和节点7 之间插入一个节点9,则需要如下步骤:
(1)定义一个节点并用 malloc 函数分配内存,用 q 表示。
(2)将节点7 连接在节点q 后面,即:q->next = p->next ;
(2)将节点q 连接在节点p 后面,即:p->next = q ;
题目:
输入一个链表,反转链表后,输出链表的所有元素。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
代码分析:
思路:将每次要操作的节点作为新链表的头结点即:newList
怎么实现呢?
将新链表的 头结点newList 连接在要操作节点的后面: pHead->next = newList ; (也可以说是:将要操作的节点插入在新链表的头结点前面)
然后在更新 新链表的头节点位置。
ListNode* ReverseList(ListNode* pHead)
{
ListNode* newList = 0 ; //首先定义一个新链表的头结点
while( pHead )
{
ListNode* temp = pHead->next ; //暂时保留下一个节点
pHead->next = newList ;
newList = pHead ; //更新新链表的头结点
pHead = temp ;
}
return newList ;
}
- 01_链表的翻转(C语言)
- 翻转一个单向链表的c语言代码
- c语言编程--c实现链表翻转
- 链表翻转(面试题目 C语言实现)
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- c语言的一个数组翻转
- c语言简单的字符串翻转
- c语言编程:实现数字的翻转
- 单词翻转(C语言实现)
- C语言字符串翻转
- 【c语言】二进制翻转
- C语言数据结构_链表的实现
- c语言链表_递归_创建和输出
- c语言_数据结构_单向循环链表
- c语言_数据结构_双向循环链表
- c语言_数据结构_双向循环链表
- [C++]链表部分翻转
- 无情链表的创建,,翻转翻转
- 今日头条面试手写代码-找出所有非递增减的子数组
- BZOJ 4010 [HNOI2015] 菜肴制作
- CodeForces 566 D.Restructuring Company(并查集)
- 我的java学习之路-tomcat与jsp
- (转载)2017第八届蓝桥杯C/C++ B组省赛题解
- 01_链表的翻转(C语言)
- 多线程
- 插件与主题
- [HDU 1796]How many integers can you find:容斥原理
- oralce监听配置允许访问本地数据库
- 拉格朗日插值方法示例
- 蓝桥杯JAVA语言B组_饮料换购
- golang 一行一行读文件
- iOS应用支持IPV6,就那点事儿