【问题标题】:Single Linked List Reverse单链表反向
【发布时间】:2013-08-01 12:18:41
【问题描述】:

我正在尝试学习链表。我有一点点麻烦。我已经学习了一些基本概念。例如阅读列表中的数字,如下所示:我的问题是:

  1. 谁能给我一些关于如何改进此代码的提示?我知道这很混乱。
  2. 如果我要反转这个链表(保持地址和内容相同)但操纵指针。

我该怎么做?我不想要完整的解决方案,只是一些提示。如果有人可以为我绘制任何关于如何反转链表的图表,将不胜感激。

#include <stdio.h>
#include <stdlib.h>

struct node {
   int data;
   struct node *next;
};

int main (int argc, char *argv[]){

   struct node *pNew, *pHead, *pCurr;
   int i, dataEntered, numberOfNodes;
   printf("Please enter the amount of nodes: ");
   scanf("%d", &numberOfNodes);   

   for (i = 0; i < numberOfNodes; i++){
      printf("Enter data for node %d : ", numberOfNodes-i);
      scanf("%d", &dataEntered);     
      pNew = malloc (sizeof(struct node));
      pNew -> data = dataEntered;
      pNew -> next = pHead;
      pHead = pNew;   
   }

   pCurr = pHead;
   for (i = 0; i < numberOfNodes; i++){
      printf("Node %d has a data value of: %d\n", i, pCurr->data);
      pCurr = pCurr->next;

   }


   return 0;
}

【问题讨论】:

  • 关于reverse linked list的现有问题都没有帮助吗?
  • 你需要初始化pHead。 struct node *pNew, *pHead=NULL, *pCurr;
  • 学习这些东西的诀窍是把它分解成尽可能小的步骤。你知道如何(1)做一个空列表,(2)测试看看如果列表为空,(3)从非空列表的末尾删除一个元素,(4)在非空列表的开头插入一个元素?如果你能做到这四件事,那么你就可以反转一个链表。你知道怎么做吗?

标签: c linked-list


【解决方案1】:

对于链表反转,这很简单,只需创建一个新的链表,将新节点放在链表的末尾(总是从第二个 LList 的头开始遍历,直到当前节点的下一个是null,然后把 pNew 放到这个 current->next)

【讨论】:

    【解决方案2】:

    让我给你一些代码..

    struct node *nex, *curr, *pre;
    curr = phead;
    pre = 0;
    while(curr)
    {
           nex = curr->next;
           curr->next = pre;
           pre = curr;
           curr = nex;
    }
    phead = pre;
    

    【讨论】:

    • 抱歉,我是初学者 Hitesh,所以我不太清楚 Node&lt;T&gt; 是什么意思
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 2012-04-08
    • 2014-05-01
    • 1970-01-01
    • 2011-05-03
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多