📜  C程序反转单向链表中的每个节点值

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

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

算法:
该任务可以通过以下方式完成:

  1. 线性遍历单向链表的每个节点。
  2. 反转每个节点的值。
  3. 将反向值存储在当前节点中。
// 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 现场工作专业课程学生竞争性编程现场课程。