📜  0 之间节点的链表和

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

0 之间节点的链表和

给定一个链表,其中包含一系列由“0”分隔的数字。添加它们并将它们存储在链表中。

注意:输入中不会有连续的零。

例子:

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

1. 开始迭代链表的节点。
2. 在 temp.data !=0 时进行迭代,并将这些数据添加到变量 'sum' 中。
3.当遇到0作为节点的数据时,改变之前节点的指针。

C++
// C++ program to in-place add linked list
// nodes between 0s.
#include 
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 
#include
#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


输出

5-> 9-> 6-> ->7

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