查找双向链表中最大的节点
给定一个双向链表,找出双向链表中最大的节点。
例子:
Input: 10->8->4->23->67->88
Largest node is: 88
Output: 88
Input : 34->2->78->18->120->39->7
Largest node is: 120
Output :120
使用的方法:
1. 初始化指向头节点的 temp 和 max 指针。
2. 遍历整个列表。
3.如果temp的数据大于max的数据,那么把max=temp。
4. 移动到下一个节点。
C++
/* C++ Program to find the largest
nodes in doubly linked list */
#include
using namespace std;
// Create a node of the doubly linked list
struct Node
{
int data;
struct Node* next;
struct Node* prev;
};
/* UTILITY FUNCTIONS */
/* Function to insert a node at the
beginning of the Doubly 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;
/* since we are adding at the
beginning, prev is always NULL */
new_node->prev = NULL;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* change prev of head node to new node */
if ((*head_ref) != NULL)
(*head_ref)->prev = new_node;
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Function to find the largest
nodes in Doubly Linked List */
int LargestInDLL(struct Node** head_ref)
{
struct Node *max, *temp;
/* initialize two pointer temp
and max on the head node */
temp = max = *head_ref;
// traverse the whole doubly linked list
while (temp != NULL)
{
/* if temp's data is greater than
max's data, then put max = temp
and return max->data */
if (temp->data > max->data)
max = temp;
temp = temp->next;
}
return max->data;
}
// Driver code
int main()
{
// Start with the empty list
struct Node* head = NULL;
// Let us create a linked list
push(&head, 20);
push(&head, 14);
push(&head, 181);
push(&head, 100);
cout << LargestInDLL(&head);
return 0;
}
// This code is contributed by shubhamsingh10
C
/* Program to find the largest
nodes in doubly linked list */
#include
#include
// Create a node of the doubly linked list
struct Node {
int data;
struct Node* next;
struct Node* prev;
};
/* UTILITY FUNCTIONS */
/* Function to insert a node at the
beginning of the Doubly 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;
/* since we are adding at the
beginning, prev is always NULL */
new_node->prev = NULL;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* change prev of head node to new node */
if ((*head_ref) != NULL)
(*head_ref)->prev = new_node;
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Function to find the largest
nodes in Doubly Linked List */
int LargestInDLL(struct Node** head_ref)
{
struct Node *max, *temp;
/* initialize two pointer temp
and max on the head node */
temp = max = *head_ref;
// traverse the whole doubly linked list
while (temp != NULL) {
/* if temp's data is greater than
max's data, then put max = temp
and return max->data */
if (temp->data > max->data)
max = temp;
temp = temp->next;
}
return max->data;
}
int main()
{
// Start with the empty list
struct Node* head = NULL;
// Let us create a linked list
push(&head, 20);
push(&head, 14);
push(&head, 181);
push(&head, 100);
printf("%d", LargestInDLL(&head));
return 0;
}
Java
// Java Program to find the largest
// nodes in doubly linked list
class GFG {
// Create node of the doubly linked list
static class Node {
int data;
Node next;
Node prev;
};
// UTILITY FUNCTIONS
// Function to insert a node at the
// beginning of the Doubly Linked List
static Node push(Node head_ref, int new_data)
{
// allocate node
Node new_node = new Node();
// put in the data
new_node.data = new_data;
// since we are adding at the
// beginning, prev is always null
new_node.prev = null;
// link the old list off the new node
new_node.next = (head_ref);
// change prev of head node to new node
if ((head_ref) != null)
(head_ref).prev = new_node;
// move the head to point to the new node
(head_ref) = new_node;
return head_ref;
}
// Function to find the largest
// nodes in Doubly Linked List
static int LargestInDLL(Node head_ref)
{
Node max, temp;
// initialize two pointer temp
// and max on the head node
temp = max = head_ref;
// traverse the whole doubly linked list
while (temp != null) {
// if temp's data is greater than
// max's data, then put max = temp
// and return max.data
if (temp.data > max.data)
max = temp;
temp = temp.next;
}
return max.data;
}
public static void main(String args[])
{
// Start with the empty list
Node head = null;
// Let us create a linked list
head = push(head, 20);
head = push(head, 14);
head = push(head, 181);
head = push(head, 100);
System.out.printf("%d", LargestInDLL(head));
}
}
// This code is contributed by Arnab Kundu
Python3
# Python3 program to find largest
# node in doubly linked list
# Node of the doubly linked list
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
# Function to find pair whose product
# equal to given value x
def pairProduct(head, x):
# Set two pointers,
# first to the beginning of DLL
# and second to the end of DLL.
first = head
second = head
while (second.next != None):
second = second.next
# To track if we find a pair or not
found = False
# The loop terminates when either of two pointers
# become None, or they cross each other (second.next
# == first), or they become same (first == second)
while (first != None and
second != None and first != second and
second.next != first) :
# pair found
if ((first.data * second.data) == x) :
found = True
print("(" , first.data,
", ", second.data, ")")
# move first in forward direction
first = first.next
# move second in backward direction
second = second.prev
else :
if ((first.data * second.data) < x):
first = first.next
else:
second = second.prev
# if pair is not present
if (found == False):
print( "No pair found")
# A utility function to insert a new node at the
# beginning of doubly linked list
def push( head, data):
temp = Node(0)
temp.data = data
temp.next = temp.prev = None
if (head == None):
(head) = temp
else :
temp.next = head
(head).prev = temp
(head) = temp
return head
""" Function to find the largest
nodes in Doubly Linked List """
def LargestInDLL( head_ref):
max = None
temp = None
""" initialize two pointer temp
and max on the head node """
temp = max = head_ref
# traverse the whole doubly linked list
while (temp != None):
""" if temp's data is greater than
max's data, then put max = temp
and return max.data """
if (temp.data > max.data):
max = temp
temp = temp.next
return max.data
# Driver Code
if __name__ == "__main__":
# Start with the empty list
head = None
# Let us create a linked list
head = push(head, 20)
head = push(head, 14)
head = push(head, 181)
head = push(head, 100)
print( LargestInDLL(head))
# This code is contributed by Arnab Kundu
C#
// C# Program to find the largest
// nodes in doubly linked list
using System;
class GFG {
// Create node of the doubly linked list
public class Node {
public int data;
public Node next;
public Node prev;
};
// UTILITY FUNCTIONS
// Function to insert a node at the
// beginning of the Doubly Linked List
static Node push(Node head_ref, int new_data)
{
// allocate node
Node new_node = new Node();
// put in the data
new_node.data = new_data;
// since we are adding at the
// beginning, prev is always null
new_node.prev = null;
// link the old list off the new node
new_node.next = (head_ref);
// change prev of head node to new node
if ((head_ref) != null)
(head_ref).prev = new_node;
// move the head to point to the new node
(head_ref) = new_node;
return head_ref;
}
// Function to find the largest
// nodes in Doubly Linked List
static int LargestInDLL(Node head_ref)
{
Node max, temp;
// initialize two pointer temp
// and max on the head node
temp = max = head_ref;
// traverse the whole doubly linked list
while (temp != null) {
// if temp's data is greater than
// max's data, then put max = temp
// and return max.data
if (temp.data > max.data)
max = temp;
temp = temp.next;
}
return max.data;
}
// Driver code
public static void Main(String[] args)
{
// Start with the empty list
Node head = null;
// Let us create a linked list
head = push(head, 20);
head = push(head, 14);
head = push(head, 181);
head = push(head, 100);
Console.Write("{0}", LargestInDLL(head));
}
}
// This code contributed by Rajput-Ji
Javascript
输出:
181
时间复杂度:O(n)
辅助空间:O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。