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++ 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 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 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# 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 |
<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> |
YES
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)