代码随想录算法训练营第三天【链表】203.移除链表元素、707.设计链表、206.反转链表
203.移除链表元素
力扣题目链接:https://leetcode.cn/problems/remove-linked-list-elements/
心得:这道题做出来了,但是看了题解,发现使用虚拟头结点更简清晰,附上代码。
没用虚拟头结点:
class Solution { public ListNode removeElements(ListNode head, int val) { while(head != null && head.val == val){ head = head.next; } if(head == null){ return head; } ListNode cur = head; while(cur.next != null){ if(cur.next.val == val){ cur.next = cur.next.next; }else{ cur = cur.next; } } return head; } }
设置虚拟头结点:
class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dummyHead = new ListNode(); dummyHead.next = head; ListNode cur = dummyHead; while(cur.next != null){ if(cur.next.val == val){ cur.next = cur.next.next; }else{ cur = cur.next; } } return dummyHead.next; } }
707.设计链表
力扣题目链接:https://leetcode.cn/problems/design-linked-list/
心得:时间不够,先学习一下思路,后面补代码
206.反转链表
力扣题目链接:https://leetcode.cn/problems/reverse-linked-list/
心得:关键点在于要明确三个节点(上一个节点、当前节点、下一个节点),反转过程如下:
1)首先记录下一个节点
2)当前节点反转
3)上一个节点移动
4)当前节点移动
class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head; ListNode pre = null; ListNode next = null; while(cur != null){ next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; } }
浙公网安备 33010602011771号