203. Remove Linked List Elements

 avatar
unknown
plain_text
2 years ago
3.3 kB
10
Indexable
/**
 * 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 {
    public static int lenLL(ListNode head){
        ListNode curr = head;
        int length = 0;
        while(curr != null){
            length++;
            curr = curr.next;
        }
        return length;
    }
    public static boolean areSame(Integer arr[])
    {
        // Put all array elements in a HashSet
        Set<Integer> s = new HashSet<>(Arrays.asList(arr));
 
        // If all elements are same, size of
        // HashSet should be 1. As HashSet contains only distinct values.
        return (s.size() == 1);
    }
    public ListNode removeElements(ListNode head, int val) {
        int lenOfLL = lenLL(head);
        Integer[] nums = new Integer[lenOfLL];
        ListNode curr = head;
        int i = 0;
        while(curr != null){
            nums[i] = curr.val;
            i++;
            curr = curr.next;
        }
        int valFrequency = 0;
        for(int k = 0;k < nums.length;k++){
            if(nums[k] == val){
                valFrequency++;
            }
            else{
                continue;
            }
        }
        int[] valPositions = new int[valFrequency];
        int p = 0;
        for(int l = 0;l < nums.length;l++){
            if(nums[l] == val){
                valPositions[p] = l;
                p++;
                continue;
            }
            else{
                continue;
            }
        }
        System.out.println(Arrays.toString(valPositions));
        //int j = 0;
        //ListNode curr2 = head;
        ListNode finalHead;
        if(areSame(nums) && valFrequency != 0){
            return null;
            
        }
        else if(valFrequency == 0){
            return head;
           
        }
        else{
        int j = 0;
        ListNode curr2 = head;
        ListNode curr3 = head;
        for(int h = 0; h < valFrequency; h++){
        while(curr2 != null){
            if(valPositions[h] == 0){
                curr2 = curr2.next;
                if(curr3 != null)
                curr3 = curr3.next;
                j++;
                head = head.next;
                break;
            }
            if(j == valPositions[h] - 1){
                if(curr3.next == null){
                curr3 = curr3.next;
                curr2.next = curr3;break;
                }
                
                else{
                curr3 = curr3.next.next;
                //curr2 = curr2.next;
                curr2.next = curr3;
                curr2 = curr2.next;
                }
                j+=2;
                break;
            }
            else{
                if(curr2 != null)
                curr2 = curr2.next;
                if(curr3 != null){
                curr3 = curr3.next;
                }
                j++;
                continue;
            }
        }
        }
        finalHead = head;
        }
return finalHead;

    }
}
Editor is loading...