两个技巧搞定力扣常见链表题
1. 掌握哑节点
-
链表的特性导致在我们对头结点执行删除操作时, 需要处理头节点为空的边界问题。
-
而哑节点的定义可以帮助我们简化逻,那么下面从一个简单的题目入手移除链表元素,了解这个技巧。
删除给定链表中值等于给定值val的所有节点
-
无哑节点思路:
- 删除头结点
- 删除其他节点
//循环每次删除符合条件的头结点 while(head!=null&&head.val==val){ head=head.next; } //链表为空的操作 if(head==null) return head; ListNode prev=head; //非头结点的删除操作 while(prev.next!=null){ if(prev.next.val==val){ prev.next=prev.next.next; }else{ prev=prev.next; } } return head;
-
带哑节点操作:
- 建立哑节点,指向原头结点
- 所有节点都可以使用同一套逻辑的删除操作
ListNode dummy=new ListNode(-1); //哑节点初始化为null dummy.next=head; ListNode cur=dummy; while(cur.next!=null) { if(cur.next.val==val) { cur.next=cur.next.next; } else{ cur=cur.next; } } return dummy