C程序反转单向链表中的每个节点值
链表是数据元素的线性集合,其中每个节点都指向下一个节点。与数组不同,它没有上限,因此非常有用。
任务是访问链表每个节点的值并反转它们。
例子:
Input : 56 87 12 49 35
Output :65 78 21 94 53
Input : 128 87 12433 491 33
Output :821 78 33421 194 33
算法:
该任务可以通过以下方式完成:
- 线性遍历单向链表的每个节点。
- 反转每个节点的值。
- 将反向值存储在当前节点中。
// C program to reverse every node data in
// singly linked list.
#include
#include
// A linked list node
struct Node {
int data;
struct Node* next;
};
// newNode function inserts the new node at
// the right side of linked list
struct Node* newNode(int key)
{
struct Node* temp = new Node;
temp->data = key;
temp->next = NULL;
return temp;
}
// reverse() will receive individual data item
// from reverseIndividualData() and will return
// the reversed number to calling function
int reverse(int number)
{
int new_num = 0, rem;
while (number != 0) {
rem = number % 10;
new_num = new_num * 10 + rem;
number = number / 10;
}
return new_num;
}
void reverseIndividualData(struct Node* node)
{
if (node == NULL)
return;
while (node != NULL) {
/* function call to reverse(),
reverseIndividualData(struct Node *node)
will send the one data item at a time to
reverse(node->data) function which will
return updated value to node->data*/
node->data = reverse(node->data);
/* updating node pointer so as to get
next value */
node = node->next;
}
}
// Function to print nodes in linked list
void printList(struct Node* node)
{
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
}
// Driver program to test above functions
int main()
{
struct Node* head = NULL;
head = newNode(56);
head->next = newNode(87);
head->next->next = newNode(12);
head->next->next->next = newNode(49);
head->next->next->next->next = newNode(35);
printf("\nList before reversing individual data item \n");
printList(head);
reverseIndividualData(head);
printf("\nList after reversing individual data item\n");
printList(head);
return 0;
}
输出:
List before reversing individual data item
56 87 12 49 35
List after reversing individual data item
65 78 21 94 53
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。