将数组转换为循环双链接列表

先决条件 : 双链表 , 循环链表 , 循环双链表 给定N个元素的数组。任务是编写一个程序,将数组转换为 循环双链表 .

null

Image Representation

其思想是开始遍历数组,为每个数组元素创建一个新的列表节点,并分配 下一个 相应地,该节点的指针。

  • 创建一个指针 开始 指向列表的开头,该列表最初将指向NULL(空列表)。
  • 对于数组的第一个元素,创建一个新节点,并将该节点的 下一个 指针指向指向开始以保持列表的循环方式。
  • 对于其余的数组元素,将这些元素插入到创建的循环双链接列表的末尾。

以下是上述理念的实施:

C++

// CPP program to convert array to
// circular doubly linked list
#include<bits/stdc++.h>
using namespace std;
// Doubly linked list node
struct node
{
int data;
struct node *next;
struct node *prev;
};
// Utility function to create a node in memory
struct node* getNode()
{
return (( struct node *) malloc ( sizeof ( struct node)));
}
// Function to display the list
int displayList( struct node *temp)
{
struct node *t = temp;
if (temp == NULL)
return 0;
else
{
cout<< "The list is: " ;
while (temp->next != t)
{
cout<<temp->data<< " " ;
temp = temp->next;
}
cout<<temp->data;
return 1;
}
}
// Function to convert array into list
void createList( int arr[], int n, struct node **start)
{
// Declare newNode and temporary pointer
struct node *newNode,*temp;
int i;
// Iterate the loop until array length
for (i=0;i<n;i++)
{
// Create new node
newNode = getNode();
// Assign the array data
newNode->data = arr[i];
// If it is first element
// Put that node prev and next as start
// as it is circular
if (i==0)
{
*start = newNode;
newNode->prev = *start;
newNode->next = *start;
}
else
{
// Find the last node
temp = (*start)->prev;
// Add the last node to make them
// in circular fashion
temp->next = newNode;
newNode->next = *start;
newNode->prev = temp;
temp = *start;
temp->prev = newNode;
}
}
}
// Driver Code
int main()
{
// Array to be converted
int arr[] = {1,2,3,4,5};
int n = sizeof (arr) / sizeof (arr[0]);
// Start Pointer
struct node *start = NULL;
// Create the List
createList(arr, n, &start);
// Display the list
displayList(start);
return 0;
}


JAVA

// Java program to convert array to
// circular doubly linked list
class GFG
{
// Doubly linked list node
static class node
{
int data;
node next;
node prev;
};
// Utility function to create a node in memory
static node getNode()
{
return new node();
}
// Function to display the list
static int displayList( node temp)
{
node t = temp;
if (temp == null )
return 0 ;
else
{
System.out.print( "The list is: " );
while (temp.next != t)
{
System.out.print(temp.data+ " " );
temp = temp.next;
}
System.out.print(temp.data);
return 1 ;
}
}
// Function to convert array into list
static node createList( int arr[], int n, node start)
{
// Declare newNode and temporary pointer
node newNode,temp;
int i;
// Iterate the loop until array length
for (i = 0 ; i < n; i++)
{
// Create new node
newNode = getNode();
// Assign the array data
newNode.data = arr[i];
// If it is first element
// Put that node prev and next as start
// as it is circular
if (i == 0 )
{
start = newNode;
newNode.prev = start;
newNode.next = start;
}
else
{
// Find the last node
temp = (start).prev;
// Add the last node to make them
// in circular fashion
temp.next = newNode;
newNode.next = start;
newNode.prev = temp;
temp = start;
temp.prev = newNode;
}
}
return start;
}
// Driver Code
public static void main(String args[])
{
// Array to be converted
int arr[] = { 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
// Start Pointer
node start = null ;
// Create the List
start = createList(arr, n, start);
// Display the list
displayList(start);
}
}
// This code is contributed by Arnab Kundu


Python3

# Python3 program to convert array to
# circular doubly linked list
# Node of the doubly linked list
class Node:
def __init__( self , data):
self .data = data
self .prev = None
self . next = None
# Utility function to create a node in memory
def getNode():
return (Node( 0 ))
# Function to display the list
def displayList(temp):
t = temp
if (temp = = None ):
return 0
else :
print ( "The list is: " , end = " " )
while (temp. next ! = t):
print (temp.data, end = " " )
temp = temp. next
print (temp.data)
return 1
# Function to convert array into list
def createList(arr, n, start):
# Declare newNode and temporary pointer
newNode = None
temp = None
i = 0
# Iterate the loop until array length
while (i < n):
# Create new node
newNode = getNode()
# Assign the array data
newNode.data = arr[i]
# If it is first element
# Put that node prev and next as start
# as it is circular
if (i = = 0 ):
start = newNode
newNode.prev = start
newNode. next = start
else :
# Find the last node
temp = (start).prev
# Add the last node to make them
# in circular fashion
temp. next = newNode
newNode. next = start
newNode.prev = temp
temp = start
temp.prev = newNode
i = i + 1
return start
# Driver Code
if __name__ = = "__main__" :
# Array to be converted
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
# Start Pointer
start = None
# Create the List
start = createList(arr, n, start)
# Display the list
displayList(start)
# This code is contributed by Arnab Kundu


C#

// C# program to convert array to
// circular doubly linked list
using System;
class GFG
{
// Doubly linked list node
public class node
{
public int data;
public node next;
public node prev;
};
// Utility function to create a node in memory
static node getNode()
{
return new node();
}
// Function to display the list
static int displayList( node temp)
{
node t = temp;
if (temp == null )
return 0;
else
{
Console.Write( "The list is: " );
while (temp.next != t)
{
Console.Write(temp.data + " " );
temp = temp.next;
}
Console.Write(temp.data);
return 1;
}
}
// Function to convert array into list
static node createList( int []arr,
int n, node start)
{
// Declare newNode and temporary pointer
node newNode,temp;
int i;
// Iterate the loop until array length
for (i = 0; i < n; i++)
{
// Create new node
newNode = getNode();
// Assign the array data
newNode.data = arr[i];
// If it is first element
// Put that node prev and next as start
// as it is circular
if (i == 0)
{
start = newNode;
newNode.prev = start;
newNode.next = start;
}
else
{
// Find the last node
temp = (start).prev;
// Add the last node to make them
// in circular fashion
temp.next = newNode;
newNode.next = start;
newNode.prev = temp;
temp = start;
temp.prev = newNode;
}
}
return start;
}
// Driver Code
public static void Main(String []args)
{
// Array to be converted
int []arr = {1,2,3,4,5};
int n = arr.Length;
// Start Pointer
node start = null ;
// Create the List
start = createList(arr, n, start);
// Display the list
displayList(start);
}
}
// This code contributed by Rajput-Ji


Javascript

<script>
// JavaScript program to convert array to
// circular doubly linked list
// Doubly linked list node
class node
{
constructor()
{
this .data=0;
this .next= this .prev= null ;
}
}
// Utility function to create a node in memory
function getNode()
{
return new node();
}
// Function to display the list
function displayList(temp)
{
let t = temp;
if (temp == null )
return 0;
else
{
document.write( "The list is: " );
while (temp.next != t)
{
document.write(temp.data+ " " );
temp = temp.next;
}
document.write(temp.data);
return 1;
}
}
// Function to convert array into list
function createList(arr,n,start)
{
// Declare newNode and temporary pointer
let newNode,temp;
let i;
// Iterate the loop until array length
for (i = 0; i < n; i++)
{
// Create new node
newNode = getNode();
// Assign the array data
newNode.data = arr[i];
// If it is first element
// Put that node prev and next as start
// as it is circular
if (i == 0)
{
start = newNode;
newNode.prev = start;
newNode.next = start;
}
else
{
// Find the last node
temp = (start).prev;
// Add the last node to make them
// in circular fashion
temp.next = newNode;
newNode.next = start;
newNode.prev = temp;
temp = start;
temp.prev = newNode;
}
}
return start;
}
// Driver Code
let arr=[1,2,3,4,5];
let n = arr.length;
// Start Pointer
let start = null ;
// Create the List
start = createList(arr, n, start);
// Display the list
displayList(start);
// This code is contributed by avanitrachhadiya2155
</script>


输出:

The list is: 1 2 3 4 5

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享