今日工作小结:

解了两天的 bug 最后发现是前端的问题😄(前端走了那块的逻辑,但是其实后端没有数据), 有点小麻,但是问题不大😃;

解了两天的主要原因是不够熟练,走到死胡同里去了;浪费了不少时间;

其中涉及到 es 的语法问题;可以去熟悉一下 es;

今日算法:

1. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode pre = null;
ListNode cur = head;
while(cur != null) {
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}

// 一开始设置了一个虚拟头节点,实际上是没用的,甚至反作用;
// 有点惯性思维了,其实说到底还是不熟悉
// 还看了答案,纯菜!

2. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。💢

u4vEB.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode node = head.next;
head.next = swapPairs(node.next);
node.next = head;
return node;
}
}
//依旧没想到怎么做
//大概想了1分钟左右;没想过递归,然后直接做法感觉比较麻烦就没想了
//好好反思!

直接做法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode newHead = new ListNode(0,head);
ListNode p = newHead;
while(p.next != null && p.next.next != null)
{
ListNode x = p.next;
ListNode y = p.next.next;
x.next = y.next;
y.next = x;
p.next = y;
p = x;
}
return newHead.next;
}
}
//评论偷的,简单易懂;
//还是自己没有深入思考

3. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

u4pRa.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
lass Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
ListNode tmp = head;
ListNode cur = head;
ListNode pre = dummyNode;
while(--n > 0) {
cur = cur.next;
}
while(cur.next != null) {
cur = cur.next;
pre = pre.next;
tmp = tmp.next;
}
pre.next = tmp.next;

return dummyNode.next;
}
}
// 似乎可以不用tmp节点;
// 可以这么操作: pre.next = pre.next.next;
// 这个问题不是很大;
Edited on Views times

Give me a cup of [coffee]~( ̄▽ ̄)~*

deku酱 WeChat Pay

WeChat Pay

deku酱 Alipay

Alipay

deku酱 PayPal

PayPal