链表

206、反转链表

时间秒杀一切 提交于 2020-03-09 19:44:05
用迭代法,将个节点的值往前插 如 1->2->3->4->5 new一个Null节点 第一个节点1->NULL head=head->next 第二个节点2->1->NULL就这样前插 /** Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; / class Solution { public: ListNode reverseList(ListNode* head) { ListNode* list=NULL; while(head!=NULL) { ListNode* node=new ListNode(-1); node->val=head->val; node->next=list; list=node; head=head->next; } return list; } }; 当然,最容易想到的方法是将链表里面的数字扔进容器,然后反向生成一个链表就行。 用栈也行 /** Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next

两个链表求第一个公共交点

纵饮孤独 提交于 2020-03-09 19:13:58
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle ( ListNode head ) { if ( head == null ) { return null ; } ListNode meetNode = meetingNode ( head ) ; if ( meetNode == null ) { //说明无环 return null ; } ListNode fast = head ; ListNode slow = meetNode ; while ( slow != fast ) { slow = slow . next ; fast = fast . next ; } return slow ; } //寻找相遇节点,如果无环,返回null public ListNode meetingNode (

从尾到头打印链表

房东的猫 提交于 2020-03-09 19:05:34
题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { ListNode *temp=NULL; ListNode *prev=NULL; ListNode *curr=head; vector<int> a; while(curr) { temp=curr; curr=curr->next; temp->next=prev; prev=temp; } while(temp) { a.push_back(temp->val); temp=temp->next; } return a; } }; 来源: CSDN 作者: Youngaaguo 链接: https://blog.csdn.net/qq_34774170/article/details/104754575

数组、链表、栈、队列

▼魔方 西西 提交于 2020-03-09 19:01:51
数组 主要了解常用的基本操作以及对应的时间复杂度 数组、队列、集合、字典 链表 常用的单链表、双向链表、循环链表 常用的基本操作及其时间复杂度 Java源码分析 链表示例 java java 跳表 空间换时间 跳跃表 为什么使用跳表而不是红黑 LRU缓存机制 来源: CSDN 作者: 你家要不要小太阳 链接: https://blog.csdn.net/weixin_42051011/article/details/104751945

C结构体与链表

a 夏天 提交于 2020-03-09 18:38:57
今 天来总结C语言的学习盲点——结构体,为了不显单一,也为了补足作者链表的编程缺陷,特更此博文,总结近段时间的学习成果。话不多说,先上一段代码 struct none{int item; link next;}; typedef struct none *link; int main(int argc ,char *argv[]) { int i , N = atoi(argv[1]) , M = atoi(argv[2]); link t = malloc(sizeof(*t)) , x=t; t->item = 1; t->next = t; for(i=2 ; i <= N ; i++) { x = x->next = malloc(sizeof(*x)); x->item = i; x->next = t; } while(x != x->next) { for(i=1 ; i < M ; i++) x = x->next; x->next = x->next->next; } printf("%d\n",x->item); return 0; } 上面这段代码是解决约瑟夫问题的一种算法 代 码开头两行定义一个链表的数据节点并为节点结构取一别名link,注意:使用typedef取别名不能定义新的数据结构,只能对现有结构取别名。主函数里获取执行程序时对主函数输入的参数

数据结构Day9

不想你离开。 提交于 2020-03-09 13:45:57
1、删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode * removeNthFromEnd ( struct ListNode * head , int n ) { struct ListNode * front = head , * temp = NULL ; //设置两个指针变量,一个指向第n个节点,另一个保持头节点, //之后一直做循环,直到second节点指向了最后一个节点时, //此时first节点就会指向倒数第n个节点,之后对该节点做删除操作即可。 struct ListNode * first = head , * second = head ; int ntemp = n ; while ( n ) { if ( second -> next != NULL ) { second =

leetcode python3 环形链表

醉酒当歌 提交于 2020-03-09 11:40:05
代码思路:利用快慢指针遍历链表,若存在环形链表,两指针必相遇,否则快指针会先遍历完成 class Solution : def hasCycle ( self , head : ListNode ) - > bool : show = fast = head while fast and fast . next : show = show . next fast = fast . next . next if show == fast : return True return False 来源: CSDN 作者: jkn7 链接: https://blog.csdn.net/m0_37656366/article/details/104745759

字节跳动面试官这样问我HashMap,我刚好都会!

↘锁芯ラ 提交于 2020-03-09 10:46:05
前言 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。 正文 一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。 看着眼前这个美丽的女人,心想这不会就是Java基础系列的面试官吧,真香。 不过看样子这么年轻应该问不出什么深度的吧,嘻嘻。(哦?是么😏) 小伙子,听前面的面试官说了,你Redis和消息队列都回答得不错,看来还是有点东西。 美丽迷人的面试官您好,您见笑了,全靠看了敖丙的《吊打面试官》系列,不然我还真的回答不上很多原本的知识盲区,他真的有点东西。 面试官心想:哦,吊打面试官是么,那今天我就让你知道,吊打这两个字怎么写的吧,年轻人啊,提前为你感到惋惜。 嗯嗯小帅比,虽然前面的技术栈没啥太大的瑕疵,不过未来很长的一段时间我会用一期期的基础教你做人的,你要准备好哟! 好了我们开始今天的面试吧,小伙子你了解数据结构中的HashMap么

算法刻意练习-LeetCode实战09-环形链表

天涯浪子 提交于 2020-03-09 10:44:19
环形链表: 原题链接: 环形链表 这道题我的思路是这样的:依次遍历链表的每一个节点,如果第一次访问,则将这个节点的数据域置为正无穷(INT_MAX)。 一直遍历,这时有两种情况:如果是环形链表,则一定会再次遍历到这个节点,即如果在遍历的过程中遇到数据域为INT_MAX的节点,证明有环,返回true;如果没有环,则一定会出现被遍历到的节点为NULL的情况,返回false。 代码如下: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head ) { if ( head == NULL ) return false ; while ( head != NULL && head - > val != INT_MAX ) { head - > val = INT_MAX ; head = head - > next ; } if ( head == NULL ) return false ; else return true ; } } ; 执行情况:

Java数据结构

别说谁变了你拦得住时间么 提交于 2020-03-09 09:31:26
记录刷PTA时用到的几种常用的类 Class LinkedList<E> LinkedList继承了Deque和List两个接口,是个很好用的双向链表。 常用操作 (继承自Deque,左边是对首节点操作,右边是对尾节点操作) 值得注意的是,add,remove,get这几个方法在遇到空间不足或列表为空的情况时抛出异常,而offer,poll,peek则返回null。 由于继承了List,还有 add (int index, E element), remove (int index) 这几个方法,可以在指定位置插入删除元素。 toArray()方法和toArray(T[] a)方法 toArray()方法是对列表内容的浅拷贝,装入新生成的一个数组中,如果链表中存入的是基本类型的数据,修改返回结果不会影响原链表,如果存入的是对象类型,则修改返回结果是不安全的。 toArray(T[] a)方法根据T返回一个指定类型的数组,T必须是链表元素类型的父类或本身,通常我们使用 String[] y = x.toArray(new String[0]); 传入一个空数组来使用这个方法。 详见 这篇博文 来源: CSDN 作者: AKaga 链接: https://blog.csdn.net/qq_19693145/article/details/104742309