移除链表元素
思路:
这道题很容易想到的一个思路是开辟一片新的空间,然后遍历原数组,将符合条件的加入新链表,这样做空间复杂度为O(n)。
第二种方法是在原地修改链表,空间复杂度为O(1)。需要注意的是保证注意最后一个节点值为val的情况。
具体操作流程见下图:
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
// 在原链表上操作,空间复杂度为O(1)
public ListNode removeElements(ListNode head, int val) {
ListNode preHead = new ListNode();
ListNode res = preHead;
while( head != null ){
if( head.val != val ) {
preHead.next = head;
preHead = preHead.next;
}
head = head.next;
}
// 保证最后一个节点值为val的情况
preHead.next = null;
return res.next;
}
}