📜  检查链接列表是否已排序(迭代和递归)

📅  最后修改于: 2021-04-24 22:10:42             🧑  作者: Mango

给定一个链表,任务是检查链表是否按降序排序?

例子 :

Input  : 8 -> 7 -> 5 -> 2 -> 1
Output : Yes
Explanation :
In given linked list, starting from head,
8 > 7 > 5 > 2 > 1. So, it is sorted in reverse order

Input  : 24 -> 12 -> 9 -> 11 -> 8 -> 2
Output : No

迭代方法:从头到尾遍历链表。对于每个新遇到的元素,请检查node-> data> node-> next-> data 。如果为True,则对每个节点执行相同操作,否则返回0并打印“ No”。

C++
// C++ program to check Linked List is sorted
// in descending order or not
#include 
using namespace std;
 
/* Linked list node */
struct Node
{
    int data;
    struct Node* next;
};
 
// function to Check Linked List is
// sorted in descending order or not
bool isSortedDesc(struct Node *head)
{
    if (head == NULL)
        return true;
 
    // Traverse the list till last node and return
    // false if a node is smaller than or equal
    // its next.
    for (Node *t=head; t->next != NULL; t=t->next)
       if (t->data <= t->next->data)
            return false;
    return true;
}
 
Node *newNode(int data)
{
   Node *temp = new Node;
   temp->next = NULL;
   temp->data = data;
}
 
// Driver program to test above
int main()
{
    struct Node *head = newNode(7);
    head->next = newNode(5);
    head->next->next = newNode(4);
    head->next->next->next = newNode(3);
        
    isSortedDesc(head) ? cout << "Yes" :
                         cout << "No";
     
    return 0;
}


Java
// Java program to check Linked List is sorted
// in descending order or not
class GFG
{
 
/* Linked list node */
static class Node
{
    int data;
    Node next;
};
 
// function to Check Linked List is
// sorted in descending order or not
static boolean isSortedDesc(Node head)
{
    if (head == null)
        return true;
 
    // Traverse the list till last node and return
    // false if a node is smaller than or equal
    // its next.
    for (Node t = head; t.next != null; t = t.next)
    if (t.data <= t.next.data)
            return false;
    return true;
}
 
static Node newNode(int data)
{
    Node temp = new Node();
    temp.next = null;
    temp.data = data;
    return temp;
}
 
// Driver Code
public static void main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program to check Linked List is sorted
# in descending order or not
''' Linked list Node '''
 
class Node:
    def __init__(self, data):
        self.data = data;
        self.next = next;
 
# function to Check Linked List is
# sorted in descending order or not
def isSortedDesc(head):
    if (head == None):
        return True;
 
    # Traverse the list till last Node and return
    # False if a Node is smaller than or equal
    # its next.
    while(head.next != None):
        t = head;
        if (t.data <= t.next.data):
            return False;
        head = head.next
    return True;
 
def newNode(data):
    temp = Node(0);
    temp.next = None;
    temp.data = data;
    return temp;
 
# Driver Code
if __name__ == '__main__':
    head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
 
    if (isSortedDesc(head)):
        print("Yes");
    else:
        print("No");
 
# This code is contributed by 29AjayKumar


C#
// C# program to check Linked List is sorted
// in descending order or not
using System;
     
class GFG
{
 
/* Linked list node */
public class Node
{
    public int data;
    public Node next;
};
 
// function to Check Linked List is
// sorted in descending order or not
static bool isSortedDesc(Node head)
{
    if (head == null)
        return true;
 
    // Traverse the list till last node and
    // return false if a node is smaller than
    // or equal to its next.
    for (Node t = head;
              t.next != null; t = t.next)
    if (t.data <= t.next.data)
            return false;
    return true;
}
 
static Node newNode(int data)
{
    Node temp = new Node();
    temp.next = null;
    temp.data = data;
    return temp;
}
 
// Driver Code
public static void Main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by Rajput-Ji


C++
// C++ program to recursively check Linked List
// is sorted in descending order or not
#include 
using namespace std;
 
/* Linked list node */
struct Node
{
    int data;
    struct Node* next;
};
 
// function to Check Linked List is
// sorted in descending order or not
bool isSortedDesc(struct Node *head)
{
    // Base cases
    if (head == NULL || head->next == NULL)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.  
    return (head->data > head->next->data &&
        isSortedDesc(head->next));
}
 
Node *newNode(int data)
{
   Node *temp = new Node;
   temp->next = NULL;
   temp->data = data;
}
 
// Driver program to test above
int main()
{
    struct Node *head = newNode(7);
    head->next = newNode(5);
    head->next->next = newNode(4);
    head->next->next->next = newNode(3);
        
    isSortedDesc(head) ? cout << "Yes" :
                         cout << "No";
     
    return 0;
}


Java
// Java program to recursively check Linked List
// is sorted in descending order or not
class GfG {
 
/* Linked list node */
static class Node
{
    int data;
    Node next;
}
 
// function to Check Linked List is
// sorted in descending order or not
static boolean isSortedDesc(Node head)
{
    // Base cases
    if (head == null || head.next == null)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.
    return (head.data > head.next.data && isSortedDesc(head.next));
}
 
static Node newNode(int data)
{
Node temp = new Node();
temp.next = null;
temp.data = data;
return temp;
}
 
// Driver program to test above
public static void main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head) == true)
    System.out.println("Yes");
    else
    System.out.println("No");
     
}
}


Python3
# Python3 program to recursively check
# Linked List is sorted in descending
# order or not
  
# Linked list node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.next = None
 
# Function to Check Linked List is
# sorted in descending order or not
def isSortedDesc(head):
     
    # Base cases
    if (head == None or head.next == None):
        return True
      
    # Check first two nodes and recursively
    # check remaining.  
    return (head.data > head.next.data and
           isSortedDesc(head.next))
 
def newNode(data):
 
   temp = Node(data)
   return temp
    
# Driver code
if __name__=="__main__":
     
    head = newNode(7)
    head.next = newNode(5)
    head.next.next = newNode(4)
    head.next.next.next = newNode(3)
         
    if isSortedDesc(head):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by rutvik_56


C#
// C# program to recursively check Linked List
// is sorted in descending order or not
using System;
 
class GfG
{
 
/* Linked list node */
public class Node
{
    public int data;
    public Node next;
}
 
// function to Check Linked List is
// sorted in descending order or not
static bool isSortedDesc(Node head)
{
    // Base cases
    if (head == null || head.next == null)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.
    return (head.data > head.next.data &&
                    isSortedDesc(head.next));
}
 
static Node newNode(int data)
{
    Node temp = new Node();
    temp.next = null;
    temp.data = data;
    return temp;
}
 
// Driver code
public static void Main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head) == true)
    Console.WriteLine("Yes");
    else
    Console.WriteLine("No");
     
}
}
 
// This code contributed by Rajput-Ji


输出:
Yes

时间复杂度:O(N),其中N是链表的长度。

递归方法:
递归检查节点->数据>节点->下一个->数据,如果不是,则返回0,这是我们从递归中得出的终止条件,否则递归调用下一个节点的Check_List函数。

C++

// C++ program to recursively check Linked List
// is sorted in descending order or not
#include 
using namespace std;
 
/* Linked list node */
struct Node
{
    int data;
    struct Node* next;
};
 
// function to Check Linked List is
// sorted in descending order or not
bool isSortedDesc(struct Node *head)
{
    // Base cases
    if (head == NULL || head->next == NULL)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.  
    return (head->data > head->next->data &&
        isSortedDesc(head->next));
}
 
Node *newNode(int data)
{
   Node *temp = new Node;
   temp->next = NULL;
   temp->data = data;
}
 
// Driver program to test above
int main()
{
    struct Node *head = newNode(7);
    head->next = newNode(5);
    head->next->next = newNode(4);
    head->next->next->next = newNode(3);
        
    isSortedDesc(head) ? cout << "Yes" :
                         cout << "No";
     
    return 0;
}

Java

// Java program to recursively check Linked List
// is sorted in descending order or not
class GfG {
 
/* Linked list node */
static class Node
{
    int data;
    Node next;
}
 
// function to Check Linked List is
// sorted in descending order or not
static boolean isSortedDesc(Node head)
{
    // Base cases
    if (head == null || head.next == null)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.
    return (head.data > head.next.data && isSortedDesc(head.next));
}
 
static Node newNode(int data)
{
Node temp = new Node();
temp.next = null;
temp.data = data;
return temp;
}
 
// Driver program to test above
public static void main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head) == true)
    System.out.println("Yes");
    else
    System.out.println("No");
     
}
}

Python3

# Python3 program to recursively check
# Linked List is sorted in descending
# order or not
  
# Linked list node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.next = None
 
# Function to Check Linked List is
# sorted in descending order or not
def isSortedDesc(head):
     
    # Base cases
    if (head == None or head.next == None):
        return True
      
    # Check first two nodes and recursively
    # check remaining.  
    return (head.data > head.next.data and
           isSortedDesc(head.next))
 
def newNode(data):
 
   temp = Node(data)
   return temp
    
# Driver code
if __name__=="__main__":
     
    head = newNode(7)
    head.next = newNode(5)
    head.next.next = newNode(4)
    head.next.next.next = newNode(3)
         
    if isSortedDesc(head):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by rutvik_56

C#

// C# program to recursively check Linked List
// is sorted in descending order or not
using System;
 
class GfG
{
 
/* Linked list node */
public class Node
{
    public int data;
    public Node next;
}
 
// function to Check Linked List is
// sorted in descending order or not
static bool isSortedDesc(Node head)
{
    // Base cases
    if (head == null || head.next == null)
        return true;
     
    // Check first two nodes and recursively
    // check remaining.
    return (head.data > head.next.data &&
                    isSortedDesc(head.next));
}
 
static Node newNode(int data)
{
    Node temp = new Node();
    temp.next = null;
    temp.data = data;
    return temp;
}
 
// Driver code
public static void Main(String[] args)
{
    Node head = newNode(7);
    head.next = newNode(5);
    head.next.next = newNode(4);
    head.next.next.next = newNode(3);
         
    if(isSortedDesc(head) == true)
    Console.WriteLine("Yes");
    else
    Console.WriteLine("No");
     
}
}
 
// This code contributed by Rajput-Ji
输出:
Yes
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”