Swap alternate nodes in a singly linked list - Algorithms and Problem SolvingAlgorithms and Problem Solving



Swap alternate nodes in a singly linked list - Algorithms and Problem SolvingAlgorithms and Problem Solving

Given a single Linked List. Swap every other alternate nodes.

For example, given 1–>2–>3–>4–>5–>null then output 3–>4–>5–>2–>1–>null. Note that, the list was transformed in several steps.

  1. First step, swap 1 and 3 i.e. 3–>2–>1–>4–>5–>null
  2. Second step, swap 2 and 4 i.e. 3–>4–>1–>2–>5–>null
  3. last step, swap 1 and 5, i.e. 3–>4–>5–>2–>1–>null

We can observe that, each step it is reversing the linked list of size 3 from current node and moving the head to next node for next step. Reversing a 3 element linked list is pretty simple using two swaps (or using 2 temp variables). The hardest part of this problem is to maintain the head of the list. Here is a simple but working code.

public static LinkedListNode swapAlternateNodes(final LinkedListNode head) {      if (head == null || head.next == null) {          return head;      }        LinkedListNode newhead = null;      LinkedListNode prev = head;      LinkedListNode cur = prev.next;      LinkedListNode temp = null;      LinkedListNode lastTemp = null;      while (cur != null && cur.next != null) {          temp = cur.next;            prev.next = cur.next.next;          cur.next = prev;          temp.next = cur;            if (newhead == null) {              newhead = temp;          } else {              lastTemp.next = temp;          }            prev = cur;          cur = cur.next;          lastTemp = temp;      }        return newhead;  }  

 

Sometimes this problem is confused with another problem of swapping alternate pair of elements which will transform 1–>2–>3–>4–>5–>null into 2–>1–>4–>3–>5–>null. This one is pretty simple as we are swapping 2 elements each step.


Read full article from Swap alternate nodes in a singly linked list - Algorithms and Problem SolvingAlgorithms and Problem Solving


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts