刷题笔记2022.2.25
- 链表,双指针。不会指针用数组做也可,->把链表拷贝到数组中。vector.back()意思是返回数组中末尾的元素。注意输出的是节点,就是list node*类型的。快慢指针法也挺简单的,就是一个速度是1,一个是2,2的走完了1的在中间那。
- 删除链表倒数第n个节点。我试了先转移到vector里再删除的方法,但是总编译出错。不太敢用链表做,笑死,其实就是不会。复习一下链表的各种用法。
方法一:计算链表长度
我们首先从头节点开始对链表进行一次遍历,得到链表的长度 LL。随后我们再从头节点开始对链表进行一次遍历,当遍历到第 L-n+1L−n+1 个节点时,它就是我们需要删除的节点。
好像不管什么做法都没有直接使用head当头节点,都是再新建一个用head表示
初始化一个空节点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list:ListNode list = new ListNode(0,head);dummy是创建的头节点。
方法二:双指针
初始时first 和second 均指向头节点。我们首先使用first 对链表进行遍历,遍历的次数为n。此时,first 和second 之间间隔了n−1 个节点,即first 比 second 超前了 n个节点。
在这之后,我们同时使用 first 和second 对链表进行遍历。当first 遍历到链表的末尾(即first 为空指针)时,second 恰好指向倒数第 n 个节点。
再改变一点,让second从头节点开始遍历,就能正好删除了。挺简单的,我感觉自己已经学会了,注意有的句子的顺序:
second->next=second->next->next;
ListNode* ans=dummy->next;
- 判断数独的有效性:好吧矩阵我不熟哈希表也不会。
好像就是9*9的表格内每个元素都按三条标准去筛选思路不难,完善难
char(c-'0')后得到的是一个ascii码为1的字符。
int index=c-'0'-1;//asci码这里很巧。
- 矩阵有0,行列全变0.我试着做了能执行但提交有错,堆栈溢出。知道为啥了,列那里不可以用martix[1],因为不一定有1,要用0.我做出来了。
- 链表,双指针。不会指针用数组做也可,->把链表拷贝到数组中。vector.back()意思是返回数组中末尾的元素。注意输出的是节点,就是list node*类型的。快慢指针法也挺简单的,就是一个速度是1,一个是2,2的走完了1的在中间那。
- 删除链表倒数第n个节点。我试了先转移到vector里再删除的方法,但是总编译出错。不太敢用链表做,笑死,其实就是不会。复习一下链表的各种用法。
方法一:计算链表长度
我们首先从头节点开始对链表进行一次遍历,得到链表的长度 LL。随后我们再从头节点开始对链表进行一次遍历,当遍历到第 L-n+1L−n+1 个节点时,它就是我们需要删除的节点。
好像不管什么做法都没有直接使用head当头节点,都是再新建一个用head表示
初始化一个空节点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list:ListNode list = new ListNode(0,head);dummy是创建的头节点。
方法二:双指针
初始时first 和second 均指向头节点。我们首先使用first 对链表进行遍历,遍历的次数为n。此时,first 和second 之间间隔了n−1 个节点,即first 比 second 超前了 n个节点。
在这之后,我们同时使用 first 和second 对链表进行遍历。当first 遍历到链表的末尾(即first 为空指针)时,second 恰好指向倒数第 n 个节点。
再改变一点,让second从头节点开始遍历,就能正好删除了。挺简单的,我感觉自己已经学会了,注意有的句子的顺序:
second->next=second->next->next;
ListNode* ans=dummy->next;
- 判断数独的有效性:好吧矩阵我不熟哈希表也不会。
好像就是9*9的表格内每个元素都按三条标准去筛选思路不难,完善难
char(c-'0')后得到的是一个ascii码为1的字符。
int index=c-'0'-1;//asci码这里很巧。