Check if a Linked List is Pairwise Sorted
Last Updated :
22 Dec, 2022
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>
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Similar Reads
Check if a linked list is sorted in non-increasing order Given a Linked List, The task is to check whether the Linked List is sorted in a non-increasing order.Examples : Input : 8 -> 7 -> 5 -> 2 -> 1Output: YesInput : 24 -> 12 -> 9 -> 11 -> 8 -> 2Output: No[Expected Approach - 1] Using Recursion - O(n) Time and O(n) Space:The id
11 min read
Check if a given array is pairwise sorted or not An array is considered pairwise sorted if each successive pair of numbers is in sorted (non-decreasing) order. In case of odd elements, last element is ignored and result is based on remaining even number of elements. Examples: Input : arr[] = {10, 15, 9, 9, 1, 5}; Output : Yes Pairs are (10, 15), (
5 min read
Check if elements of Linked List are present in pair Given a singly linked list of integers. The task is to check if each element in the linked list is present in a pair i.e. all elements occur even no. of times.Examples: Input: 1 -> 2 -> 3 -> 3 -> 1 -> 2Output: YesInput: 10 -> 20 -> 30 -> 20Output: NoMethod : Using MapWe will
5 min read
Check if a linked list is Circular Linked List Given the head of a singly linked list, the task is to find if given linked list is circular or not. A linked list is called circular if its last node points back to its first node.Note: The linked list does not contain any internal loops.Example:Input: LinkedList: 2->4->6->7->5 Output:
12 min read
Check if a pair with given product exists in Linked list Given a linked list, and a product K. The task is to check if there exist two numbers in the linked list whose product is equal to the given number K. If there exist two numbers, print them. If there are multiple answers, print any of them. Examples: Input : List = 1 -> 2 -> 3 -> 4 -> 5
13 min read
Sorted insert for circular linked list Given a sorted circular linked list, your task is to insert a new node in this circular list so that it remains a sorted circular linked list.Examples:Input: head = 1Â â2Â â4, data = 2Output: 1Â â2Â â2Â â4Explanation: We can add 2 after the second node.Input: head = 1Â â4Â â7Â â9, data = 5Output: 1Â â4Â â5Â â7
10 min read