用于重新排列链接列表的Java程序,以使所有偶数和奇数位置的节点都在一起
重新排列链表,使所有奇数位置节点在一起,所有偶数位置节点在一起,
例子:
Input: 1->2->3->4
Output: 1->3->2->4
Input: 10->22->30->43->56->70
Output: 10->30->56->22->43->70
这个问题的重要一点是确保处理以下所有情况
- 空链表。
- 只有一个节点的链表。
- 只有两个节点的链表。
- 具有奇数个节点的链表。
- 具有偶数个节点的链表。
下面的程序分别为奇数和偶数位置的当前节点维护两个指针“奇数”和“偶数”。我们还存储了偶数链表的第一个节点,以便在所有奇数和偶数节点在两个不同的链表中连接在一起之后,我们可以将偶数链表附加到奇数链表的末尾。
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
输出:
Given Linked List
1->2->3->4->5->NULL
Modified Linked List
1->3->5->2->4->NULL
请参阅有关重新排列链表的完整文章,以便所有偶数和奇数位置的节点都在一起以获取更多详细信息!