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 现场工作专业课程和学生竞争性编程现场课程。