Chp5链表和递归
LeetCode中链表的相关问题
删除链表中等于给定值val的所有元素。
示例
给定:1–>2–>6–>3–>4–>5–>6 ,val =6
返回:1–>2–>3–>4–>5
解题思路:调用在LeetCode中定义好的LinkedList类
1,首先要求头结点不是空的,如果头节点中包含val,则直接删除,但是要用循环,因为head.next和之后的Node中也许会还包含指定元素
2,如果链表中从开始到最后都是要删除的节点,则直接返回空。
3,找到待删除元素的前一个节点。因为此时的,head肯定不为空,所以把prev设为head。
4,只要该节点(prev)的下一个节点(prev.next)不为空,如果有包含val的节点。则删除该节点;否则prev向后移动一位。
5,结束所有的操作后最后返回head节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { public ListNode removeElements(ListNode head, int val) { while(head != null && head.val == val){ ListNode delNode = head; head = head.next; delNode.next = null; } if(head == null) return null; ListNode prev = head; while(prev.next != null){ if(prev.next.val == val){ ListNode delNode = prev.next; prev.next = delNode.next; delNode = null; } else prev = prev.next; } return head; } }
|