`
runfeel
  • 浏览: 935770 次
文章分类
社区版块
存档分类
最新评论

C链表反转(时间复杂度O(n))

 
阅读更多

面试的时候经常会出现的问题,现在都做一遍,回忆一下,练练手.

这个题目需要注意两点:

1.head->next 要先设置为NULL ,否则反转后,它还是指向之前的next节点

2.需要有一个tmp指针,临时保存p->next的地址,这个在改变一个节点的next地址时,经常会用到


示意图



代码实现

#include<stdio.h>
 
struct ListNode{
	int data;
	ListNode *next;
} 

ListNode* reverse(ListNode* head){
	ListNode *p,*tmp ;
	p = head->next;
	head->next=NULL;
	while(p){
		tmp = p->next; //图1 保存p->next
		p->next = head; //图1 反向指向head 
		head = p ; //图2 head 指向p  
		p = tmp; //图2 p指向p->next 
	}
	return head; 
}



分享到:
评论

相关推荐

    O n 复杂度实现单链表的逆转

    一个C程序 实现了单链表的逆序 且复杂度为O n

    java链表反转及排序

    插入排序的时间复杂度在最坏的情况下是O(n^2),最好情况下是O(n),平均是O(n^2)。空间复杂度是O(1),因为我们只使用了常量级别的额外空间。 在Test文件中,可能包含了测试这些链表操作的代码,你可以通过创建一些...

    C语言O(1)空间复杂度实现单链表反转

    用C语言O(1)空间复杂度实现单链表反转,C语言数据结构的作业,有需要的尽管拿去用吧,赚点小分,无聊腻了

    [面试/笔试系列5]链表反转

    - **时间复杂度**:无论是迭代法还是递归法,都只需要遍历一次链表,因此时间复杂度均为 O(n),其中 n 是链表中节点的数量。 - **空间复杂度**:迭代法的空间复杂度为 O(1),因为除了几个额外的指针外,没有使用额外...

    c语言链表的基本操作.rar

    10. **链表的查找操作**:在链表中查找特定元素,需要从头节点开始逐个比较,时间复杂度为O(n),其中n为链表长度。 以上是C语言链表操作的基础知识,通过学习和实践这些概念,可以掌握链表这一重要数据结构的运用,...

    链表回文判断1

    1. `reverseList`:反转链表,时间复杂度为O(n),其中n是链表的节点数,空间复杂度为O(1)。 2. `chkPalindrome`:判断链表是否为回文,时间复杂度同样为O(n),空间复杂度为O(1)。 这两个方法结合使用,可以高效地...

    Python实现数据结构与算法——反转链表

    迭代法的时间复杂度为 O(n),因为它只遍历一次链表,空间复杂度为 O(1),因为我们只使用了常量级别的额外空间。 接下来是递归解法。递归方法利用函数调用栈来实现链表的反转。我们创建一个辅助节点 `fake_head`,其...

    数据结构第1次作业.docx

    2.21 题目是链表反转的C语言实现,通过迭代完成,时间复杂度为 O(n)。 2.24 题目是合并两个已排序的链表,给出的C语言实现将两个链表合并成一个有序链表,时间复杂度为 O(n)。 2.31 题目可能是关于删除链表中特定...

    数组和链表(使用场景和反转链表) 数组和链表.pdf

    该算法的时间复杂度为O(n),空间复杂度为O(1),非常高效。 总结来说,数组和链表各有其适用的场景和优势。数组适合用于数据规模较小且已知,且对存取和修改操作频繁而插入和删除操作较少的场景,而链表适合用于数据...

    反转链表的一般用法和递归用法

    迭代法思路直观,但需要额外的指针和循环,空间复杂度较低(O(1)),时间复杂度为O(n),其中n是链表的长度。递归法代码简洁,但递归深度可能达到n,可能导致栈溢出,空间复杂度为O(n)。在实际应用中,应根据具体需求...

    链表去重内容介绍.zip

    这种方法需要两次反转链表,时间复杂度为O(n),但增加了额外的复杂性。 在实现链表去重的过程中,需要注意处理边界条件,例如空链表、单节点链表等。同时,为了保持链表原有的顺序,我们需要谨慎选择合适的方法,...

    1273545169#Course_notes#反转单向或双向链表1

    题目描述分别实现反转单向链表和反转双向链表的函数。【要求】 如果链表长度为N, 时间复杂度要求为O(N), 额外空间复杂度要求为O(1)解题思路反转单向链表反转

    反转链表1

    这个解决方案的时间复杂度为O(n),其中n是链表中的节点数量,因为它仅遍历一次链表。空间复杂度为O(1),因为我们只使用了常数个额外的指针,没有使用与链表大小相关的额外空间。 在LeetCode等在线编程平台上,这样...

    链表的操作

    - 思路2:时间复杂度O(n),使用快慢指针(快指针每次走两步,慢指针走一步),一次遍历找到中间元素。 这些链表操作涵盖了链表的基本操作和一些进阶技巧,对于理解和掌握链表数据结构至关重要。它们不仅有助于面试...

    链表.zip

    由于不能像数组那样直接通过索引访问,查找操作通常需要遍历整个链表,时间复杂度为O(n)。 4. 遍历:沿着链表的指针顺序访问所有节点,可以用于打印链表的所有元素或执行其他操作。 5. 反转:将链表的顺序反转。这...

    算法面试通关40讲完整课件 05-07 数组、链表

    2. 插入(Insert):在数组中插入元素通常需要移动后续元素,因此平均时间复杂度为O(n)。在末尾插入可以做到O(1),但在中间或开头插入则需要移动大量元素。 3. 删除(Delete):与插入类似,删除元素也需要移动后续...

    javalruleetcode-algorithm:《数据结构与算法之美》练习

    时间复杂度 最好 O(m + n) 最坏 O(mn) 空间复杂度 O(m);时间复杂度 O(m + n) LeetCode#999 链表 单链表 Java实现 及 实现了链表的反转 双向链表 Java实现 及 实现了链表的反转 循环链表 Java实现 及 实现了链表的...

    数据结构 链表的操作可反复操作

    7. **合并链表**:将两个已排序的链表合并成一个有序链表,常用的方法是两个指针同时遍历两个链表,比较元素大小并插入到新链表中,时间复杂度为O(n)。 链表的这些操作在“dos改后”的上下文中可能意味着代码已经过...

    java-leetcode题解之第206题反转链表.zip

    而递归法的时间复杂度同样是O(n),但由于递归调用,其空间复杂度是O(n),因为递归栈的深度可能达到n层。 ### 练习意义 通过这道题目,开发者可以提升对链表操作的理解,尤其是链表的反转,这是许多其他链表问题的...

    02-链表与队列1

    而链表(如std::list)的插入和删除操作通常是O(1),因为只需要修改相邻节点的指针,但随机访问(查找)则需要遍历链表,时间复杂度为O(N)。 【链表实现】 在C/C++中,链表可以使用数组或者指针来实现。数组实现的...

Global site tag (gtag.js) - Google Analytics