Open In App

Check if a Linked List is Pairwise Sorted

Last Updated : 22 Dec, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a linked list. The task is to check if the linked list is pairwise sorted or not.

A Linked List is considered pairwise sorted if each successive pair of numbers is in sorted (non-decreasing) order. In the case of odd number of nodes, the last node is ignored and the result is based on the remaining even number of nodes.

Examples: 

Input: List =  10 -> 15 -> 9 -> 9 -> 1 -> 5
Output: YES

Input: List = 10 -> 15 -> 8 -> 9 -> 10 -> 5
Output: NO

Approach: The idea is to traverse the linked list from left to right. Compare nodes pairwise, if any pair violates property, return false. If no pair violates property, return True.

Below is the implementation of above approach: 

C++
// C++ program to check if linked list is
// pairwise sorted
#include <iostream>

using namespace std;

// A linked list node
struct Node {
    int data;
    struct Node* next;
};

// Function to check if linked list is
// pairwise sorted
bool isPairWiseSorted(struct Node* head)
{
    bool flag = true;

    struct Node* temp = head;

    // Traverse further only if there
    // are at-least two nodes left
    while (temp != NULL && temp->next != NULL) {
        if (temp->data > temp->next->data) {
            flag = false;
            break;
        }

        temp = temp->next->next;
    }

    return flag;
}

// Function to add a node at the
// beginning of Linked List
void push(struct Node** head_ref, int new_data)
{
    /* allocate node */
    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));

    /* put in the data */
    new_node->data = new_data;

    /* link the old list of the new node */
    new_node->next = (*head_ref);

    /* move the head to point to the new node */
    (*head_ref) = new_node;
}

// Driver program to test above function
int main()
{
    struct Node* start = NULL;

    /* The constructed linked list is: 
    10->15->9->9->1->5 */
    push(&start, 5);
    push(&start, 1);
    push(&start, 9);
    push(&start, 9);
    push(&start, 15);
    push(&start, 10);

    if (isPairWiseSorted(start))
        cout << "YES";
    else
        cout << "NO";

    return 0;
}
Java
// Java program to check if linked list is 
// pairwise sorted 
class GFG
{ 

// A linked list node 
static class Node
{ 
    int data; 
    Node next; 
}; 
static Node start;

// Function to check if linked list is 
// pairwise sorted 
static boolean isPairWiseSorted(Node head) 
{ 
    boolean flag = true; 

    Node temp = head; 

    // Traverse further only if there 
    // are at-least two nodes left 
    while (temp != null && temp.next != null) 
    { 
        if (temp.data > temp.next.data) 
        { 
            flag = false; 
            break; 
        } 

        temp = temp.next.next; 
    } 
    return flag; 
} 

// Function to add a node at the 
// beginning of Linked List 
static void push(Node head_ref, int new_data) 
{ 
    
    /* allocate node */
    Node new_node = new Node(); 

    /* put in the data */
    new_node.data = new_data; 

    /* link the old list of the new node */
    new_node.next = head_ref; 

    /* move the head to point to the new node */
    head_ref = new_node; 
        start = head_ref;
} 

// Driver Code
public static void main(String[] args) 
{
    start = null; 

    /* The constructed linked list is: 
    10.15.9.9.1.5 */
    push(start, 5); 
    push(start, 1); 
    push(start, 9); 
    push(start, 9); 
    push(start, 15); 
    push(start, 10); 

    if (isPairWiseSorted(start)) 
        System.out.println("YES");
    else
        System.out.println("NO");
    }
}

// This code is contributed by PrinciRaj1992 
Python
# Python program to check if linked list is 
# pairwise sorted 

# Linked List node 
class Node: 
    def __init__(self, data): 
        self.data = data 
        self.next = None
        
start = None

# Function to check if linked list is 
# pairwise sorted 
def isPairWiseSorted(head) :

    flag = True

    temp = head 

    # Traverse further only if there 
    # are at-least two nodes left 
    while (temp != None and temp.next != None) :
    
        if (temp.data > temp.next.data) :
            flag = False
            break
        
        temp = temp.next.next
    
    return flag 

# Function to add a node at the 
# beginning of Linked List 
def push(head_ref, new_data) :

    global start
    # allocate node 
    new_node = Node(0) 

    # put in the data 
    new_node.data = new_data 

    # link the old list of the new node 
    new_node.next = head_ref 

    # move the head to point to the new node 
    head_ref = new_node 
    start = head_ref

# Driver Code
start = None

# The constructed linked list is: 
# 10.15.9.9.1.5 
push(start, 5) 
push(start, 1) 
push(start, 9) 
push(start, 9) 
push(start, 15) 
push(start, 10) 

if (isPairWiseSorted(start)) :
    print("YES")
else:
    print("NO")
    
# This code is contributed by Arnab Kundu
C#
// C# program to check if linked list is 
// pairwise sorted 
using System;
class GFG
{ 

// A linked list node 
public class Node
{ 
    public int data; 
    public Node next; 
}; 
static Node start;

// Function to check if linked list is 
// pairwise sorted 
static Boolean isPairWiseSorted(Node head) 
{ 
    Boolean flag = true; 

    Node temp = head; 

    // Traverse further only if there 
    // are at-least two nodes left 
    while (temp != null && temp.next != null) 
    { 
        if (temp.data > temp.next.data) 
        { 
            flag = false; 
            break; 
        } 

        temp = temp.next.next; 
    } 
    return flag; 
} 

// Function to add a node at the 
// beginning of Linked List 
static void push(Node head_ref, int new_data) 
{ 
    
    /* allocate node */
    Node new_node = new Node(); 

    /* put in the data */
    new_node.data = new_data; 

    /* link the old list of the new node */
    new_node.next = head_ref; 

    /* move the head to point to the new node */
    head_ref = new_node; 
    start = head_ref;
} 

// Driver Code
public static void Main(String[] args) 
{
    start = null; 

    /* The constructed linked list is: 
    10.15.9.9.1.5 */
    push(start, 5); 
    push(start, 1); 
    push(start, 9); 
    push(start, 9); 
    push(start, 15); 
    push(start, 10); 

    if (isPairWiseSorted(start)) 
        Console.WriteLine("YES");
    else
        Console.WriteLine("NO");
    }
}

// This code is contributed by Rajput-Jiv
JavaScript
<script>

      // JavaScript program to check if linked list is
      // pairwise sorted
      // A linked list node
      class Node {
        constructor() {
          this.data = 0;
          this.next = null;
        }
      }
      var start = null;

      // Function to check if linked list is
      // pairwise sorted
      function isPairWiseSorted(head) {
        var flag = true;

        var temp = head;

        // Traverse further only if there
        // are at-least two nodes left
        while (temp != null && temp.next != null) {
          if (temp.data > temp.next.data) {
            flag = false;
            break;
          }

          temp = temp.next.next;
        }
        return flag;
      }

      // Function to add a node at the
      // beginning of Linked List
      function push(head_ref, new_data) {
        /* allocate node */
        var new_node = new Node();

        /* put in the data */
        new_node.data = new_data;

        /* link the old list of the new node */
        new_node.next = head_ref;

        /* move the head to point to the new node */
        head_ref = new_node;
        start = head_ref;
      }

      // Driver Code
      start = null;

      /* The constructed linked list is:
    10.15.9.9.1.5 */
      push(start, 5);
      push(start, 1);
      push(start, 9);
      push(start, 9);
      push(start, 15);
      push(start, 10);

      if (isPairWiseSorted(start)) document.write("YES");
      else document.write("NO");
      
</script>

Output
YES

Complexity Analysis:

  • Time Complexity: O(n)
  • Auxiliary Space: O(1)

Next Article
Article Tags :
Practice Tags :

Similar Reads