Swap elements in LinkedList

前端 未结 7 1772
别那么骄傲
别那么骄傲 2020-12-20 14:32

I want to maintain order of the elements being added in a list. So, I used a LinkedList in Java.

Now I want to be able to swap two elements in the linke

相关标签:
7条回答
  • 2020-12-20 15:25

    If you are writing your own LinkedList class for exercise (i.e. for a project or school), try making two temporary Object variables and two ints to hold their position in the List. Then, use add(int, Object) to add the first in the 2nd position, second in the 1st position.

    0 讨论(0)
  • 2020-12-20 15:26

    add

    Does this what you want?

    If you want to keep the list in a sorted state, why not just insert the element with addfirst

    and then sort the list using Collections.sort

    0 讨论(0)
  • 2020-12-20 15:26
     // I tried to reduce time complexity here, in 3 while loops (get() and set() use 4 while loop)
       void swapAt(int index1, int index2){ // swapping at index
            Node tmp = head;
            int count=0;
            int min, max;   // for future reference to reduce time complexity
            if(index1<index2){
                 min = index1;
                 max = index2;
            }
            else{
                 min = index2;
                 max = index1;
            }    
            int diff = max - min;
            while(min!=count){
                tmp=  tmp.next;
                count++;
            }
            int minValue = tmp.data; 
            while(max!=count){
                tmp=  tmp.next;
                count++;
            }
            int maxValue = tmp.data;
            tmp.data = minValue;
            tmp = head;
            count =0;
            while(min!=count){
                tmp=  tmp.next;
                count++;
            }
            tmp.data = maxValue;
        }
    
    0 讨论(0)
  • 2020-12-20 15:27

    Take a look at ArrayList , this class will both maintain the insertion order and provide O(1) random access.

    0 讨论(0)
  • 2020-12-20 15:28
    public class SwapNode {
    
    public static Node head;
    
    public static void main(String[] args) {
        SwapNode obj = new SwapNode();
        obj.insertAtEnd(5);
        obj.insertAtEnd(6);
        obj.insertAtEnd(4);
        obj.insertAtEnd(7);
        obj.insertAtEnd(3);
        obj.insertAtEnd(8);
        obj.insertAtEnd(2);
        obj.insertAtEnd(9);
        obj.insertAtEnd(1);
        obj.print(head);
        System.out.println("*** Swapped ***");
        obj.swapElementValue(4, 2);     
    }
    
    public void swapElementValue(int value1, int value2) {
        if (value1 == value2) {
            System.out.println("Values same, so no need to swap");
            return;
        }
        boolean found1 = false, found2 = false; 
        Node node = head;
        while (node != null && !(found1 && found2)) {
            if (node.data == value1) {
                node.data = value2;
                found1 = true;
                node = node.next;
                continue;
            }
            if (node.data == value2) {
                node.data = value1;
                found2 = true;
                node = node.next;
                continue;
            }
            node = node.next;
        }
        if (found1 && found2) {
            print(head);
        } else {
            System.out.println("Values not found");
        }
    }
    
    public void insertAtEnd(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }
    
        Node temp = head;
        while (temp.next != null) {
            temp = temp.next;
        }
        temp.next = newNode;
    }
    
    public void print(Node head) {
        Node temp = head;
        while(temp != null) {
            System.out.print(temp.data);
            temp = temp.next;
        }
        System.out.println();
    }
    
    
    static class Node {
        private int data;
        public Node next;
    
        public Node(int data) {
            this.data = data;
        }
    }
    

    }

    0 讨论(0)
  • 2020-12-20 15:31

    Check out the Javadocs for LinkedList

    To find an element at an index use get(int index)

    To place an element at a certain index use set(int index, Object element)

    0 讨论(0)
提交回复
热议问题