链表
Alice_7310
这个作者很懒,什么都没留下…
展开
-
LeetCode[141]判断环形链表
原创 2022-05-16 15:42:21 · 230 阅读 · 0 评论 -
LeetCode[148]对链表进行排序[medium]
1、冒泡排序法难度主要在于如何确定内循环和外循环的结束条件。定义 p,q指针用于遍历链表元素和交换。定义一个tail指针,指向最新一轮冒泡排序的结果。内循环结束的条件是q指针指向tail。外循环结束的条件是head.next==tail,此时只有head一个元素,不需要排序。时间复杂度:O(n²) 如果有n个元素需要进行n-1,n-2,....1 总共次比较,所以时间复杂度为O(n²)由于这个原因,在链表或者数组特别大的时候,尽管对冒泡排序进行优化,这种排序算法也是不理想的。一般来...原创 2022-04-29 19:46:21 · 643 阅读 · 0 评论 -
LeetCode[147]对链表进行插入排序
1、迭代法时间复杂度:O(n²) ,其中n是链表的长度。 空间复杂度:O(1) ,只需要常量级的辅助变量。class Solution { public ListNode insertionSortList(ListNode head) { if(head==null||head.next==null) return head; ListNode newhead=new ListNode(); newhead.next=head; ListN...原创 2022-04-26 17:50:11 · 490 阅读 · 0 评论 -
LeetCode [206]反转链表
方法一:(无头节点情况)直接改next指针class solution{ public ListNode reverseList(ListNode head){ if(head==null||head.next==null) return head; ListNode p=head.next; ListNode r=new ListNode(); head.next=null;//逆转后的head变成最后一个节点,所以he原创 2022-04-23 22:29:56 · 210 阅读 · 0 评论 -
LeetCode[21]合并两个有序链表【递归方法&非递归方法】
合并两个有序数组方法一:递归方法两个链表头部值较小的一个节点与剩下元素的merge操作结果合并时间复杂度:O(m+n),因为每次递归调用函数都会去掉list1或者list2的头节点,之道至少有一个链表为空,函数至多只会调用每个节点一次,所以时间复杂度取决于合并后的链表长度,所以时间复杂度为O(m+n) 空间复杂度:O(m+n) ,其中m和n为链表长度,递归调用函数时需要消耗栈空间,栈空间的大小取决于递归调用的深度,结束递归调用mergeTwoLists函数最多调用m+n次,所以空间原创 2022-04-25 19:49:06 · 823 阅读 · 0 评论 -
LeetCode[24]两两交换链表中的结点
方法一:迭代时间复杂度:O(n) 其中n是链表中节点的数量。需要对链表中的节点更改next指针的操作。空间复杂度: O(1) 新创建的头节点newhead交换前的指针关系:temp->node1->node2 交换后:temp->node2->node1class Solution { public ListNode swapPairs(ListNode head) { if(head==null||head.next=...原创 2022-04-25 10:25:34 · 475 阅读 · 0 评论 -
LeetCode【83】 删除有序单链表中重复元素
Index [83]Category algorithmsDifficulty EasyDiscription 给定一个已经排序好的链表的头Head,删除所有重复的元素,使每一个元素只出现一次。返回已排序的链表。code:class solution{ public ListNode deleteDuplicates(ListNode head){ if(head==null) return head; //链表为空时,直接返回head ...原创 2022-04-23 17:57:12 · 694 阅读 · 0 评论