给定整数链表的头和整数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