Sudo Placement[1.4]| K Sum

给定整数链表的头和整数k,您的任务是修改链表,如下所示:

null
  • 考虑群中大小k的节点,在每个组中用组和替换第一节点的值。
  • 此外,删除组中除第一个节点之外的元素。
  • 在遍历过程中,如果链表中的剩余节点小于k,则考虑到剩余节点,也要执行上述操作。

例如:

输入: N=6,K=2 1->2->3->4->5->6 输出: 3 7 11 我们用()表示k元素的分组。()中的元素被求和。 1->2->3->4->5->6->null (1->2->3->4->5->6->null (3) ->3->4->5->6->null 3->(3->4->5->6->null 3->(7)->5->6->null 3->7->(5->6)->空 3->7->(11)->空 3->7->11->null

方法: 在链表中插入给定的节点。插入方法已在中讨论 邮递插入节点后,从列表的开头开始迭代。将第一个节点标记为 临时雇员 节点。对下一个k-1节点进行迭代,并在 总和 变量如果节点数小于K,则将临时节点的数据替换为sum,并将temp点为NULL。如果有一个组有K个节点,用sum替换temp的数据,并将temp移动到K个节点之后的节点。继续上述操作,直到temp指向NULL。一旦temp到达终点,就意味着所有大小为K的组都已被遍历,节点已被大小为K的节点之和替换。一旦替换操作完成,就可以打印这样形成的链表。链接列表的打印方法已在中讨论 邮递

以下是上述方法的实施情况:

C++

// C++ program for
// SP - K Sum
#include <iostream>
using namespace std;
// structure for linked list
struct Node {
long long data;
Node* next;
};
// allocated new node
Node* newNode( int key)
{
Node* temp = new Node;
temp->data = key;
temp->next = NULL;
return temp;
}
// function to insert node in a Linked List
Node* insertNode(Node* head, int key)
{
if (head == NULL)
head = newNode(key);
else
head->next = insertNode(head->next, key);
return head;
}
// traverse the node
// to print it
void print(Node* head)
{
// traverse the linked list
while (head) {
cout << head->data << " " ;
head = head->next;
}
cout << endl;
}
// function to perform the following operation
void KSum(Node* head, int k)
{
// initially pointing to start
Node* temp = head;
// iterate till end
while (temp) {
// dummy variable to store k
long long count = k;
// summation of nodes
long long sum = 0;
// currently at node from
// which iteration is done
Node* curr = temp;
// till k nodes are visited and
// last node is not visited
while (count-- && curr) {
// add to sum the node data
sum = sum + curr->data;
// move to the next node
curr = curr->next;
}
// change pointer's data of temp to sum
temp->data = sum;
// move temp to next pointer
temp->next = curr;
// move temp to the next pointer
temp = temp->next;
}
}
// Driver Code
int main()
{
Node* head = NULL;
// inserts nodes in the linked list
head = insertNode(head, 1);
head = insertNode(head, 2);
head = insertNode(head, 3);
head = insertNode(head, 4);
head = insertNode(head, 5);
head = insertNode(head, 6);
int k = 2;
// Function call to perform the
// given operations
KSum(head, k);
// print the linked list
print(head);
return 0;
}


JAVA

// Java program for
// SP - K Sum
import java.io.*;
import java.util.*;
// structure for linked list
class Node
{
int data;
Node next;
Node( int key)
{
data = key;
next = null ;
}
}
class GFG
{
// allocated new node
static Node head;
// function to insert node
// in a Linked List
public static Node insertNode(Node head, int key)
{
if (head == null )
head = new Node(key);
else
head.next = insertNode(head.next, key);
return head;
}
// traverse the node
// to print it
public static void print(Node head)
{
// traverse the linked list
while (head != null )
{
System.out.print(head.data + " " );
head = head.next;
}
System.out.println();
}
// function to perform
// the following operation
public static void KSum(Node head, int k)
{
// initially pointing
// to start
Node temp = head;
// iterate till end
while (temp != null )
{
// dummy variable
// to store k
int count = k;
// summation of nodes
int sum = 0 ;
// currently at node from
// which iteration is done
Node curr = temp;
// till k nodes are visited and
// last node is not visited
while (count > 0 && curr != null )
{
// add to sum the node data
sum = sum + curr.data;
// move to the next node
curr = curr.next;
count--;
}
// change pointer's data
// of temp to sum
temp.data = sum;
// move temp to
// next pointer
temp.next = curr;
// move temp to
// the next pointer
temp = temp.next;
}
//return temp;
}
// Driver Code
public static void main(String args[])
{
head = null ;
// inserts nodes in
// the linked list
head = insertNode(head, 1 );
head = insertNode(head, 2 );
head = insertNode(head, 3 );
head = insertNode(head, 4 );
head = insertNode(head, 5 );
head = insertNode(head, 6 );
int k = 2 ;
// Function call to perform
// the given operations
KSum(head, k);
// print the linked list
print(head);
}
}


Python3

# Python program for
# SP - K Sum
# structure for linked list
class Node:
def __init__( self , key):
self .data = key
self . next = None
# function to insert node in a Linked List
def insertNode(head: Node, key: int ) - > Node:
if head is None :
head = Node(key)
else :
head. next = insertNode(head. next , key)
return head
# traverse the node
# to print it
def Print (head: Node):
# traverse the linked list
while head:
print (head.data, end = " " )
head = head. next
print ()
# function to perform the following operation
def KSum(head: Node, k: int ):
# initially pointing to start
temp = head
# iterate till end
while temp:
# dummy variable to store k
count = k
# summation of nodes
sum = 0
# currently at node from
# which iteration is done
curr = temp
# till k nodes are visited and
# last node is not visited
while count and curr:
# add to sum the node data
sum = sum + curr.data
# move to the next node
curr = curr. next
count - = 1
# change pointer's data of temp to sum
temp.data = sum
# move temp to next pointer
temp. next = curr
# move temp to the next pointer
temp = temp. next
# Driver Code
if __name__ = = "__main__" :
head = None
# inserts nodes in the linked list
head = insertNode(head, 1 )
head = insertNode(head, 2 )
head = insertNode(head, 3 )
head = insertNode(head, 4 )
head = insertNode(head, 5 )
head = insertNode(head, 6 )
k = 2
# Function call to perform the
# given operations
KSum(head, k)
# print the linked list
Print (head)
# This code is contributed by
# sanjeev2552


C#

// C# program for SP - K Sum
using System;
// structure for linked list
public class Node
{
public int data;
public Node next;
public Node( int key)
{
data = key;
next = null ;
}
}
public class GFG
{
// allocated new node
static Node head;
// function to insert node
// in a Linked List
public static Node insertNode(Node head, int key)
{
if (head == null )
head = new Node(key);
else
head.next = insertNode(head.next, key);
return head;
}
// traverse the node
// to print it
public static void print(Node head)
{
// traverse the linked list
while (head != null )
{
Console.Write(head.data + " " );
head = head.next;
}
Console.WriteLine();
}
// function to perform
// the following operation
public static void KSum(Node head, int k)
{
// initially pointing
// to start
Node temp = head;
// iterate till end
while (temp != null )
{
// dummy variable
// to store k
int count = k;
// summation of nodes
int sum = 0;
// currently at node from
// which iteration is done
Node curr = temp;
// till k nodes are visited and
// last node is not visited
while (count > 0 && curr != null )
{
// add to sum the node data
sum = sum + curr.data;
// move to the next node
curr = curr.next;
count--;
}
// change pointer's data
// of temp to sum
temp.data = sum;
// move temp to
// next pointer
temp.next = curr;
// move temp to
// the next pointer
temp = temp.next;
}
// return temp;
}
// Driver Code
public static void Main()
{
head = null ;
// inserts nodes in
// the linked list
head = insertNode(head, 1);
head = insertNode(head, 2);
head = insertNode(head, 3);
head = insertNode(head, 4);
head = insertNode(head, 5);
head = insertNode(head, 6);
int k = 2;
// Function call to perform
// the given operations
KSum(head, k);
// print the linked list
print(head);
}
}
/* This code contributed by PrinciRaj1992 */


Javascript

<script>
// JavaScript program for SP - K Sum
// structure for linked list
class Node
{
constructor(key)
{
this .data = key;
this .next = null ;
}
}
// allocated new node
var head = null ;
// function to insert node
// in a Linked List
function insertNode(head, key)
{
if (head == null ) head = new Node(key);
else head.next = insertNode(head.next, key);
return head;
}
// traverse the node
// to print it
function print(head)
{
// traverse the linked list
while (head != null )
{
document.write(head.data + " " );
head = head.next;
}
document.write( "<br>" );
}
// function to perform
// the following operation
function KSum(head, k)
{
// initially pointing
// to start
var temp = head;
// iterate till end
while (temp != null )
{
// dummy variable
// to store k
var count = k;
// summation of nodes
var sum = 0;
// currently at node from
// which iteration is done
var curr = temp;
// till k nodes are visited and
// last node is not visited
while (count > 0 && curr != null )
{
// add to sum the node data
sum = sum + curr.data;
// move to the next node
curr = curr.next;
count--;
}
// change pointer's data
// of temp to sum
temp.data = sum;
// move temp to
// next pointer
temp.next = curr;
// move temp to
// the next pointer
temp = temp.next;
}
// return temp;
}
// Driver Code
head = null ;
// inserts nodes in
// the linked list
head = insertNode(head, 1);
head = insertNode(head, 2);
head = insertNode(head, 3);
head = insertNode(head, 4);
head = insertNode(head, 5);
head = insertNode(head, 6);
var k = 2;
// Function call to perform
// the given operations
KSum(head, k);
// print the linked list
print(head);
// This code is contributed by rdtank.
</script>


输出:

3 7 11

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享