今日工作小结:
解了两天的 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. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。💢
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 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
个结点,并且返回链表的头结点。
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; } }
|