Dada una lista enlazada que contiene una serie de números separados por “0”. Agréguelos y guárdelos en la lista vinculada en el lugar.
Nota: No habrá ceros continuos en la entrada.
Ejemplos:
Input : 1->2->3->0->5->4->0->3->2->0 Output : 6->9->5 Input : 1->2->3->4 Output : 1->2->3->4
- Comience a iterar sobre los Nodes de la lista vinculada.
- Iterar while temp.data !=0, y agregar estos datos en una variable ‘suma’.
- Cuando encuentre 0 como datos del Node, cambie los punteros de los Nodes anteriores.
Implementación:
C++
// C++ program to in-place add linked list // nodes between 0s. #include <bits/stdc++.h> using namespace std; #define NODE struct node // Structure of a node NODE { int data; struct node *next; }; // Function to create a node NODE *getNode(int val) { NODE *temp; temp = (NODE*)malloc(sizeof(NODE)); temp->data = val; temp->next = NULL; return temp; } // Function to traverse and print Linked List void printList(NODE *head) { while(head->next) { cout << head->data << "-> "; head = head->next; } cout << "->" << head->data ; } void inPlaceStore(NODE *head) { // Function to store numbers till 0 if(head->data == 0) { head = head->next; } // To store modified list NODE *res = head; // Traverse linked list and keep // adding nodes between 0s. NODE *temp = head; int sum = 0; while(temp) { // loop to sum the data of nodes till // it encounters 0 if(temp->data != 0) { sum += temp->data; temp = temp->next; } // If we encounters 0, we need // to update next pointers else { res->data = sum; res->next = temp->next; temp = temp->next; res = temp; sum = 0; } } printList(head); } // Driver Code int main() { NODE *head; head = getNode(3); head->next = getNode(2); head->next->next = getNode(0); head->next->next->next = getNode(4); head->next->next->next->next = getNode(5); head->next->next->next->next->next = getNode(0); head->next->next->next->next->next->next = getNode(6); head->next->next->next->next->next->next->next = getNode(7); inPlaceStore(head); return 0; } // This code is contributed by shivanisinghss2110
C
// C program to in-place add linked list // nodes between 0s. #include <stdio.h> #include<stdlib.h> #define NODE struct node // Structure of a node NODE { int data; struct node *next; }; // Function to create a node NODE *getNode(int val) { NODE *temp; temp = (NODE*)malloc(sizeof(NODE)); temp->data = val; temp->next = NULL; return temp; } // Function to traverse and print Linked List void printList(NODE *head) { while(head->next) { printf("%d->",head->data); head = head->next; } printf("%d\n",head->data); } void inPlaceStore(NODE *head) { // Function to store numbers till 0 if(head->data == 0) { head = head->next; } // To store modified list NODE *res = head; // Traverse linked list and keep // adding nodes between 0s. NODE *temp = head; int sum = 0; while(temp) { // loop to sum the data of nodes till // it encounters 0 if(temp->data != 0) { sum+=temp->data; temp = temp->next; } // If we encounters 0, we need // to update next pointers else { res->data = sum; res->next = temp->next; temp = temp->next; res = temp; sum = 0; } } printList(head); } // Driver Code int main() { NODE *head; head = getNode(3); head->next = getNode(2); head->next->next = getNode(0); head->next->next->next = getNode(4); head->next->next->next->next = getNode(5); head->next->next->next->next->next = getNode(0); head->next->next->next->next->next->next = getNode(6); head->next->next->next->next->next->next->next = getNode(7); inPlaceStore(head); return 0; } // This code is contributed by // Kaustav kumar Chanda
Java
// Java program to in-place add linked list // nodes between 0s. class Node { int data; Node next; public Node(int data) { this.data = data; this.next = null; } } public class inPlaceStoreLL { // Function to store numbers till 0 static void inPlaceStore(Node head) { if(head.data == 0){ head = head.next; } // To store modified list Node res = head; // Traverse linked list and keep // adding nodes between 0s. Node temp = head; int sum = 0; while (temp != null) { // loop to sum the data of nodes till // it encounters 0 if (temp.data != 0) { sum += temp.data; temp = temp.next; } // If we encounters 0, we need // to update next pointers else { res.data = sum; res.next = temp.next; temp = res.next; res = res.next; sum = 0; } } printList(head); } // Function to traverse and print Linked List static void printList(Node head) { while (head.next != null) { System.out.print(head.data + "-> "); head = head.next; } System.out.println(head.data); } // Driver Code public static void main(String[] args) { Node head = new Node(3); head.next = new Node(2); head.next.next = new Node(0); head.next.next.next = new Node(4); head.next.next.next.next = new Node(5); head.next.next.next.next.next = new Node(0); head.next.next.next.next.next.next = new Node(6); head.next.next.next.next.next.next.next = new Node(7); inPlaceStore(head); } }
Python3
# Python3 program to in-place add linked list # nodes between 0s. # Structure of a node class Node: def __init__(self, data): self.data = data self.next = None # Function to create a node def getNode(val): temp = Node(val) return temp # Function to traverse and print Linked List def printList(head): while (head.next): print(head.data, end = "-> ") head = head.next print("->" + str(head.data), end = '') def inPlaceStore(head): # Function to store numbers till 0 if (head.data == 0): head = head.next # To store modified list res = head # Traverse linked list and keep # adding nodes between 0s. temp = head sum = 0 while (temp): # Loop to sum the data of nodes till # it encounters 0 if (temp.data != 0): sum += temp.data temp = temp.next # If we encounters 0, we need # to update next pointers else: res.data = sum res.next = temp.next temp = temp.next res = temp sum = 0 printList(head) # Driver Code if __name__=='__main__': head = getNode(3) head.next = getNode(2) head.next.next = getNode(0) head.next.next.next = getNode(4) head.next.next.next.next = getNode(5) head.next.next.next.next.next = getNode(0) head.next.next.next.next.next.next = getNode(6) head.next.next.next.next.next.next.next = getNode(7) inPlaceStore(head) # This code is contributed by rutvik_56
C#
// C# program to in-place add linked list // nodes between 0s. using System; public class Node { public int data; public Node next; public Node(int data) { this.data = data; this.next = null; } } public class inPlaceStoreLL { // Function to store numbers till 0 static void inPlaceStore(Node head) { if(head.data == 0) { head = head.next; } // To store modified list Node res = head; // Traverse linked list and keep // adding nodes between 0s. Node temp = head; int sum = 0; while (temp != null) { // loop to sum the data of nodes till // it encounters 0 if (temp.data != 0) { sum += temp.data; temp = temp.next; } // If we encounters 0, we need // to update next pointers else { res.data = sum; res.next = temp.next; temp = res.next; res = res.next; sum = 0; } } printList(head); } // Function to traverse and print Linked List static void printList(Node head) { while (head.next != null) { Console.Write(head.data + "-> "); head = head.next; } Console.WriteLine(head.data); } // Driver Code public static void Main() { Node head = new Node(3); head.next = new Node(2); head.next.next = new Node(0); head.next.next.next = new Node(4); head.next.next.next.next = new Node(5); head.next.next.next.next.next = new Node(0); head.next.next.next.next.next.next = new Node(6); head.next.next.next.next.next.next.next = new Node(7); inPlaceStore(head); } } /* This code is contributed PrinciRaj1992 */
Javascript
<script> // JavaScript program to in-place add linked list // nodes between 0s. class Node { constructor(data) { this.data=data; this.next = null; } } // Function to store numbers till 0 function inPlaceStore(head) { if(head.data == 0){ head = head.next; } // To store modified list let res = head; // Traverse linked list and keep // adding nodes between 0s. let temp = head; let sum = 0; while (temp != null) { // loop to sum the data of nodes till // it encounters 0 if (temp.data != 0) { sum += temp.data; temp = temp.next; } // If we encounters 0, we need // to update next pointers else { res.data = sum; res.next = temp.next; temp = res.next; res = res.next; sum = 0; } } printList(head); } // Function to traverse and print Linked List function printList(head) { while (head.next != null) { document.write(head.data + "-> "); head = head.next; } document.write(head.data); } // Driver Code let head = new Node(3); head.next = new Node(2); head.next.next = new Node(0); head.next.next.next = new Node(4); head.next.next.next.next = new Node(5); head.next.next.next.next.next = new Node(0); head.next.next.next.next.next.next = new Node(6); head.next.next.next.next.next.next.next = new Node(7); inPlaceStore(head); // This code is contributed by rag2127 </script>
Producción
5-> 9-> 6-> ->7
Publicación traducida automáticamente
Artículo escrito por Dhiman Mayank y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA