📜  在给定索引处打印链表的节点

📅  最后修改于: 2022-05-13 01:57:43.690000             🧑  作者: Mango

在给定索引处打印链表的节点

给定一个单链表l1  按升序排序和另一个单链表l2  这是未排序的。任务是根据数据在第一个链表的节点中指出的位置,打印出第二个链表的元素。例如,如果第一链表是1-> 2-> 5,那么你必须打印1,2和5中的第二链表th元素。
例子

Input: l1 = 1->2->5
       l2 = 1->8->7->6->2->9->10
Output : 1->8->2
Elements in l1 are 1, 2 and 5. 
Therefore, print 1st, 2nd and 5th elements of l2,
Which are 1, 8 and 2.

Input: l1 = 2->5 
       l2 = 7->5->3->2->8
Output: 5->8 

取两个指针使用两个嵌套循环遍历两个链表。外循环指向第一个列表的元素,内循环分别指向第二个列表的元素。在外循环的第一次迭代中,指向第一个链表头的指针指向它的根节点。我们遍历第二个链表,直到到达第一个链表中节点的数据所指出的位置。一旦到达需要的位置,打印第二个链表的数据并再次重复这个过程,直到我们到达第一个链表的末尾。
下面是上述方法的实现:

C++
// C++ program to print second linked list
// according to data in the first linked list
#include 
using namespace std;
 
// Linked List Node
struct Node {
    int data;
    struct Node* next;
};
 
/* Function to insert a node at the beginning */
void push(struct Node** head_ref, int new_data)
{
    Node* new_node = new Node;
 
    new_node->data = new_data;
    new_node->next = (*head_ref);
    (*head_ref) = new_node;
}
 
// Function to print the second list according
// to the positions referred by the 1st list
void printSecondList(Node* l1, Node* l2)
{
    struct Node* temp = l1;
    struct Node* temp1 = l2;
 
    // While first linked list is not null.
    while (temp != NULL) {
        int i = 1;
 
        // While second linked list is not equal
        // to the data in the node of the
        // first linked list.
        while (i < temp->data) {
            // Keep incrementing second list
            temp1 = temp1->next;
            i++;
        }
 
        // Print the node at position in second list
        // pointed by current element of first list
        cout << temp1->data << " ";
 
        // Increment first linked list
        temp = temp->next;
 
        // Set temp1 to the start of the
        // second linked list
        temp1 = l2;
    }
}
 
// Driver Code
int main()
{
    struct Node *l1 = NULL, *l2 = NULL;
 
    // Creating 1st list
    // 2 -> 5
    push(&l1, 5);
    push(&l1, 2);
 
    // Creating 2nd list
    // 4 -> 5 -> 6 -> 7 -> 8
    push(&l2, 8);
    push(&l2, 7);
    push(&l2, 6);
    push(&l2, 5);
    push(&l2, 4);
 
    printSecondList(l1, l2);
 
    return 0;
}


Java
// Java program to print second linked list
// according to data in the first linked list
class GFG
{
     
// Linked List Node
static class Node
{
    int data;
    Node next;
};
 
/* Function to insert a node at the beginning */
static Node push( Node head_ref, int new_data)
{
    Node new_node = new Node();
 
    new_node.data = new_data;
    new_node.next = (head_ref);
    (head_ref) = new_node;
    return head_ref;
}
 
// Function to print the second list according
// to the positions referred by the 1st list
static void printSecondList(Node l1, Node l2)
{
    Node temp = l1;
    Node temp1 = l2;
 
    // While first linked list is not null.
    while (temp != null)
    {
        int i = 1;
 
        // While second linked list is not equal
        // to the data in the node of the
        // first linked list.
        while (i < temp.data)
        {
            // Keep incrementing second list
            temp1 = temp1.next;
            i++;
        }
 
        // Print the node at position in second list
        // pointed by current element of first list
        System.out.print( temp1.data + " ");
 
        // Increment first linked list
        temp = temp.next;
 
        // Set temp1 to the start of the
        // second linked list
        temp1 = l2;
    }
}
 
// Driver Code
public static void main(String args[])
{
    Node l1 = null, l2 = null;
 
    // Creating 1st list
    // 2 . 5
    l1 = push(l1, 5);
    l1 = push(l1, 2);
 
    // Creating 2nd list
    // 4 . 5 . 6 . 7 . 8
    l2 = push(l2, 8);
    l2 = push(l2, 7);
    l2 = push(l2, 6);
    l2 = push(l2, 5);
    l2 = push(l2, 4);
 
    printSecondList(l1, l2);
}
}
 
// This code is contributed by Arnab Kundu


Python3
# Python3 program to prsecond linked list
# according to data in the first linked list
 
# Linked List Node
class new_Node:
         
    # Constructor to initialize the node object
    def __init__(self, data):
        self.data = data
        self.next = None
 
''' Function to insert a node at the beginning '''
def push(head_ref, new_data):
    new_node = new_Node(new_data)
    new_node.next = head_ref
    head_ref = new_node
    return head_ref
     
# Function to prthe second list according
# to the positions referred by the 1st list
def printSecondList(l1,l2):
     
    temp = l1
    temp1 = l2
     
    # While first linked list is not None.
    while (temp != None):
        i = 1
         
        # While second linked list is not equal
        # to the data in the node of the
        # first linked list.
        while (i < temp.data):
            # Keep incrementing second list
            temp1 = temp1.next
            i += 1
             
        # Prthe node at position in second list
        # pointed by current element of first list
        print(temp1.data,end=" ")
         
        # Increment first linked list
        temp = temp.next
         
        # Set temp1 to the start of the
        # second linked list
        temp1 = l2
 
# Driver Code
l1 = None
l2 = None
 
# Creating 1st list
# 2 . 5
l1 = push(l1, 5)
l1 = push(l1, 2)
 
# Creating 2nd list
# 4 . 5 . 6 . 7 . 8
l2 = push(l2, 8)
l2 = push(l2, 7)
l2 = push(l2, 6)
l2 = push(l2, 5)
l2 = push(l2, 4)
 
printSecondList(l1, l2)
 
# This code is contributed by shubhamsingh10


C#
// C# program to print second linked list
// according to data in the first linked list
using System;
 
class GFG
{
     
// Linked List Node
public class Node
{
    public int data;
    public Node next;
};
 
/* Function to insert a node at the beginning */
static Node push( Node head_ref, int new_data)
{
    Node new_node = new Node();
 
    new_node.data = new_data;
    new_node.next = (head_ref);
    (head_ref) = new_node;
    return head_ref;
}
 
// Function to print the second list according
// to the positions referred by the 1st list
static void printSecondList(Node l1, Node l2)
{
    Node temp = l1;
    Node temp1 = l2;
 
    // While first linked list is not null.
    while (temp != null)
    {
        int i = 1;
 
        // While second linked list is not equal
        // to the data in the node of the
        // first linked list.
        while (i < temp.data)
        {
            // Keep incrementing second list
            temp1 = temp1.next;
            i++;
        }
 
        // Print the node at position in second list
        // pointed by current element of first list
        Console.Write( temp1.data + " ");
 
        // Increment first linked list
        temp = temp.next;
 
        // Set temp1 to the start of the
        // second linked list
        temp1 = l2;
    }
}
 
// Driver Code
public static void Main()
{
    Node l1 = null, l2 = null;
 
    // Creating 1st list
    // 2 . 5
    l1 = push(l1, 5);
    l1 = push(l1, 2);
 
    // Creating 2nd list
    // 4 . 5 . 6 . 7 . 8
    l2 = push(l2, 8);
    l2 = push(l2, 7);
    l2 = push(l2, 6);
    l2 = push(l2, 5);
    l2 = push(l2, 4);
 
    printSecondList(l1, l2);
}
}
 
// This code has been contributed by 29AjayKumar


Javascript


输出:
5 8

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程