重新排列链表,使所有偶数和奇数位置的节点都在一起

重新排列链表,使所有奇数位置节点在一起,所有偶数位置节点在一起, 例如:

null
Input:   1->2->3->4Output:  1->3->2->4Input:   10->22->30->43->56->70Output:  10->30->56->22->43->70

这个问题的重要一点是确保以下所有案件都得到处理 1) 空链表 2) 只有一个节点的链表 3) 只有两个节点的链表 4) 节点数为奇数的链表 5) 节点数为偶数的链表 下面的程序分别在奇数和偶数位置为当前节点维护两个指针“奇数”和“偶数”。我们还存储偶数链表的第一个节点,以便在将所有奇数和偶数节点连接在两个不同的列表中后,将偶数链表附加到奇数链表的末尾。

C++

// C++ program to rearrange a linked list in such a
// way that all odd positioned node are stored before
// all even positioned nodes
#include<bits/stdc++.h>
using namespace std;
// Linked List Node
class Node
{
public :
int data;
Node* next;
};
// A utility function to create a new node
Node* newNode( int key)
{
Node *temp = new Node;
temp->data = key;
temp->next = NULL;
return temp;
}
// Rearranges given linked list such that all even
// positioned nodes are before odd positioned.
// Returns new head of linked List.
Node *rearrangeEvenOdd(Node *head)
{
// Corner case
if (head == NULL)
return NULL;
// Initialize first nodes of even and
// odd lists
Node *odd = head;
Node *even = head->next;
// Remember the first node of even list so
// that we can connect the even list at the
// end of odd list.
Node *evenFirst = even;
while (1)
{
// If there are no more nodes, then connect
// first node of even list to the last node
// of odd list
if (!odd || !even || !(even->next))
{
odd->next = evenFirst;
break ;
}
// Connecting odd nodes
odd->next = even->next;
odd = even->next;
// If there are NO more even nodes after
// current odd.
if (odd->next == NULL)
{
even->next = NULL;
odd->next = evenFirst;
break ;
}
// Connecting even nodes
even->next = odd->next;
even = odd->next;
}
return head;
}
// A utility function to print a linked list
void printlist(Node * node)
{
while (node != NULL)
{
cout << node->data << "->" ;
node = node->next;
}
cout << "NULL" << endl;
}
// Driver code
int main( void )
{
Node *head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next = newNode(4);
head->next->next->next->next = newNode(5);
cout << "Given Linked List" ;
printlist(head);
head = rearrangeEvenOdd(head);
cout << "Modified Linked List" ;
printlist(head);
return 0;
}
// This is code is contributed by rathbhupendra


C

// C program to rearrange a linked list in such a
// way that all odd positioned node are stored before
// all even positioned nodes
#include<bits/stdc++.h>
using namespace std;
// Linked List Node
struct Node
{
int data;
struct Node* next;
};
// A utility function to create a new node
Node* newNode( int key)
{
Node *temp = new Node;
temp->data = key;
temp->next = NULL;
return temp;
}
// Rearranges given linked list such that all even
// positioned nodes are before odd positioned.
// Returns new head of linked List.
Node *rearrangeEvenOdd(Node *head)
{
// Corner case
if (head == NULL)
return NULL;
// Initialize first nodes of even and
// odd lists
Node *odd = head;
Node *even = head->next;
// Remember the first node of even list so
// that we can connect the even list at the
// end of odd list.
Node *evenFirst = even;
while (1)
{
// If there are no more nodes, then connect
// first node of even list to the last node
// of odd list
if (!odd || !even || !(even->next))
{
odd->next = evenFirst;
break ;
}
// Connecting odd nodes
odd->next = even->next;
odd = even->next;
// If there are NO more even nodes after
// current odd.
if (odd->next == NULL)
{
even->next = NULL;
odd->next = evenFirst;
break ;
}
// Connecting even nodes
even->next = odd->next;
even = odd->next;
}
return head;
}
// A utility function to print a linked list
void printlist(Node * node)
{
while (node != NULL)
{
cout << node->data << "->" ;
node = node->next;
}
cout << "NULL" << endl;
}
// Driver code
int main( void )
{
Node *head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next = newNode(4);
head->next->next->next->next = newNode(5);
cout << "Given Linked List" ;
printlist(head);
head = rearrangeEvenOdd(head);
cout << "Modified Linked List" ;
printlist(head);
return 0;
}


JAVA

// Java program to rearrange a linked list
// in such a way that all odd positioned
// node are stored before all even positioned nodes
class GfG
{
// Linked List Node
static class Node
{
int data;
Node next;
}
// A utility function to create a new node
static Node newNode( int key)
{
Node temp = new Node();
temp.data = key;
temp.next = null ;
return temp;
}
// Rearranges given linked list
// such that all even positioned
// nodes are before odd positioned.
// Returns new head of linked List.
static Node rearrangeEvenOdd(Node head)
{
// Corner case
if (head == null )
return null ;
// Initialize first nodes of even and
// odd lists
Node odd = head;
Node even = head.next;
// Remember the first node of even list so
// that we can connect the even list at the
// end of odd list.
Node evenFirst = even;
while ( 1 == 1 )
{
// If there are no more nodes,
// then connect first node of even
// list to the last node of odd list
if (odd == null || even == null ||
(even.next) == null )
{
odd.next = evenFirst;
break ;
}
// Connecting odd nodes
odd.next = even.next;
odd = even.next;
// If there are NO more even nodes
// after current odd.
if (odd.next == null )
{
even.next = null ;
odd.next = evenFirst;
break ;
}
// Connecting even nodes
even.next = odd.next;
even = odd.next;
}
return head;
}
// A utility function to print a linked list
static void printlist(Node node)
{
while (node != null )
{
System.out.print(node.data + "->" );
node = node.next;
}
System.out.println( "NULL" ) ;
}
// Driver code
public static void main(String[] args)
{
Node head = newNode( 1 );
head.next = newNode( 2 );
head.next.next = newNode( 3 );
head.next.next.next = newNode( 4 );
head.next.next.next.next = newNode( 5 );
System.out.println( "Given Linked List" );
printlist(head);
head = rearrangeEvenOdd(head);
System.out.println( "Modified Linked List" );
printlist(head);
}
}
// This code is contributed by Prerna saini


Python3

# Python3 program to rearrange a linked list
# in such a way that all odd positioned
# node are stored before all even positioned nodes
# Linked List Node
class Node:
def __init__( self , d):
self .data = d
self . next = None
class LinkedList:
def __init__( self ):
self .head = None
# A utility function to create
# a new node
def newNode( self , key):
temp = Node(key)
self . next = None
return temp
# Rearranges given linked list
# such that all even positioned
# nodes are before odd positioned.
# Returns new head of linked List.
def rearrangeEvenOdd( self , head):
# Corner case
if ( self .head = = None ):
return None
# Initialize first nodes of
# even and odd lists
odd = self .head
even = self .head. next
# Remember the first node of even list so
# that we can connect the even list at the
# end of odd list.
evenFirst = even
while ( 1 = = 1 ):
# If there are no more nodes,
# then connect first node of even
# list to the last node of odd list
if (odd = = None or even = = None or
(even. next ) = = None ):
odd. next = evenFirst
break
# Connecting odd nodes
odd. next = even. next
odd = even. next
# If there are NO more even nodes
# after current odd.
if (odd. next = = None ):
even. next = None
odd. next = evenFirst
break
# Connecting even nodes
even. next = odd. next
even = odd. next
return head
# A utility function to print a linked list
def printlist( self , node):
while (node ! = None ):
print (node.data, end = "")
print ( "->" , end = "")
node = node. next
print ( "NULL" )
# Function to insert a new node
# at the beginning
def push( self , new_data):
new_node = Node(new_data)
new_node. next = self .head
self .head = new_node
# Driver code
ll = LinkedList()
ll.push( 5 )
ll.push( 4 )
ll.push( 3 )
ll.push( 2 )
ll.push( 1 )
print ( "Given Linked List" )
ll.printlist(ll.head)
start = ll.rearrangeEvenOdd(ll.head)
print ( "Modified Linked List" )
ll.printlist(start)
# This code is contributed by Prerna Saini


C#

// C# program to rearrange a linked list
// in such a way that all odd positioned
// node are stored before all even positioned nodes
using System;
class GfG
{
// Linked List Node
class Node
{
public int data;
public Node next;
}
// A utility function to create a new node
static Node newNode( int key)
{
Node temp = new Node();
temp.data = key;
temp.next = null ;
return temp;
}
// Rearranges given linked list
// such that all even positioned
// nodes are before odd positioned.
// Returns new head of linked List.
static Node rearrangeEvenOdd(Node head)
{
// Corner case
if (head == null )
return null ;
// Initialize first nodes of even and
// odd lists
Node odd = head;
Node even = head.next;
// Remember the first node of even list so
// that we can connect the even list at the
// end of odd list.
Node evenFirst = even;
while (1 == 1)
{
// If there are no more nodes,
// then connect first node of even
// list to the last node of odd list
if (odd == null || even == null ||
(even.next) == null )
{
odd.next = evenFirst;
break ;
}
// Connecting odd nodes
odd.next = even.next;
odd = even.next;
// If there are NO more even nodes
// after current odd.
if (odd.next == null )
{
even.next = null ;
odd.next = evenFirst;
break ;
}
// Connecting even nodes
even.next = odd.next;
even = odd.next;
}
return head;
}
// A utility function to print a linked list
static void printlist(Node node)
{
while (node != null )
{
Console.Write(node.data + "->" );
node = node.next;
}
Console.WriteLine( "NULL" ) ;
}
// Driver code
public static void Main()
{
Node head = newNode(1);
head.next = newNode(2);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
head.next.next.next.next = newNode(5);
Console.WriteLine( "Given Linked List" );
printlist(head);
head = rearrangeEvenOdd(head);
Console.WriteLine( "Modified Linked List" );
printlist(head);
}
}
/* This code is contributed PrinciRaj1992 */


Javascript

<script>
// Javascript program to rearrange a linked list
// in such a way that all odd positioned
// node are stored before all even positioned nodes
// Linked List Node
class Node {
constructor() {
this .data = 0;
this .next = null ;
}
}
// A utility function to create a new node
function newNode(key) {
var temp = new Node();
temp.data = key;
temp.next = null ;
return temp;
}
// Rearranges given linked list
// such that all even positioned
// nodes are before odd positioned.
// Returns new head of linked List.
function rearrangeEvenOdd(head) {
// Corner case
if (head == null )
return null ;
// Initialize first nodes of even and
// odd lists
var odd = head;
var even = head.next;
// Remember the first node of even list so
// that we can connect the even list at the
// end of odd list.
var evenFirst = even;
while (1 == 1) {
// If there are no more nodes,
// then connect first node of even
// list to the last node of odd list
if (odd == null || even == null ||
(even.next) == null )
{
odd.next = evenFirst;
break ;
}
// Connecting odd nodes
odd.next = even.next;
odd = even.next;
// If there are NO more even nodes
// after current odd.
if (odd.next == null ) {
even.next = null ;
odd.next = evenFirst;
break ;
}
// Connecting even nodes
even.next = odd.next;
even = odd.next;
}
return head;
}
// A utility function to print a linked list
function printlist(node) {
while (node != null ) {
document.write(node.data + "->" );
node = node.next;
}
document.write( "NULL<br/>" );
}
// Driver code
var head = newNode(1);
head.next = newNode(2);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
head.next.next.next.next = newNode(5);
document.write( "Given Linked List<br/>" );
printlist(head);
head = rearrangeEvenOdd(head);
document.write( "Modified Linked List<br/>" );
printlist(head);
// This code contributed by gauravrajput1
</script>


输出:

Given Linked List1->2->3->4->5->NULLModified Linked List1->3->5->2->4->NULL

本文由 苛刻的贱民 .请看 这里是另一个代码 贡献者 乔塔姆·辛格 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

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