提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Leetcode 203移除链表元素 707 设计链表 206 反转链表
203. 移除链表元素
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
简单
● 看完代码随想录之后的想法
在整个链表前加一个节点,最后return这个节点的next
● 自己实现过程中遇到哪些困难
要判断head是不是,如果是,删掉后的head还是不是,需要很多判断条件
● 今日收获,记录一下自己的学习时长
复习了一下链表
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return null;
}
while(head.val==val){
head = head.next;
if(head == null){
return null;
}
}
ListNode pre = head;
ListNode post = head.next;
while(post != null){
if(post.val == val){
pre.next = post.next;
post = pre.next;
}else{
post = post.next;
pre = pre.next;
}
}
return head;
}
707. 设计链表
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
简单但费劲
● 看完代码随想录之后的想法
早知道方法之间调用了,不用一个个写
● 自己实现过程中遇到哪些困难
return ; 不能是 return null;
● 今日收获,记录一下自己的学习时长
有些费时间
class MyLinkedList {
public int size;
public ListNode head;
public MyLinkedList() {
this.size = 0;
this.head = null;
}
public int get(int index) {
if(index<0||index >= size){
return -1;
}
ListNode pre = head;
for(int i=0;i<index;i++){
pre = pre.next;
}
return pre.val;
}
public void addAtHead(int val) {
ListNode pre = new ListNode(val);
pre.next = head;
head = pre;
size++;
}
public void addAtTail(int val) {
ListNode post = new ListNode(val);
if(head == null){
head = post;
size++;
}else{
ListNode pre = head;
for(int i = size;i>1;i--){
pre = pre.next;
}
pre.next = post;
size++;
}
}
public void addAtIndex(int index, int val) {
if(index < 0 || index > size){
return ;
}
if(index == size){
addAtTail(val);
return ;
}
if(index == 0){
addAtHead(val);
return ;
}
ListNode post = new ListNode(val);
ListNode pre = head;
for(int i = index;i>1;i--){
pre = pre.next;
}
post.next = pre.next;
pre.next = post;
size++;
}
public void deleteAtIndex(int index) {
if(index < 0 || index > size-1){
return ;
}
if(index == 0){
head = head.next;
size--;
}else{
ListNode pre = head;
for(int i = index;i>1;i--){
pre = pre.next;
}
pre.next = pre.next.next;
size--;
}
}
}
class ListNode{
public int val;
public ListNode next;
public ListNode(int val) {
this.val = val;
}
}
206. 反转链表
● 今日学习的Leetcode链接
● 自己看到题目的第一想法
新建一个节点,然后头插,最后return 新建节点的next
● 看完代码随想录之后的想法
一样
● 自己实现过程中遇到哪些困难
头插法是需要三个指针,犹豫了。
● 今日收获,记录一下自己的学习时长
很长,该学其他的了
public ListNode reverseList(ListNode head) {
if(head == null ){
return head;
}
ListNode pre = new ListNode();
pre.next = null;
ListNode post = head;
while(post!=null){
post = post.next;
head.next = pre.next;
pre.next = head;
head = post;
}
head = pre.next;
return head;
}