单链接列表反向

时间:2013-08-01 12:18:42

标签: c linked-list

我正在尝试学习链接列表。我遇到了一点麻烦。我学到了一些基本概念。比如在列表中读取数字如下所示:我的问题是:

  1. 有人能给我一些关于如何改进此代码的提示吗?我知道这很乱。
  2. 如果我要反转此链接列表(保持地址和内容相同),但操纵指针。
  3. 我该怎么办?我不想要完整的解决方案,只需要一些提示。如果有人能给我画任何关于如何反转链表的图表,那将是值得赞赏的。

    #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;
    }
    

2 个答案:

答案 0 :(得分:0)

让我给你一些代码..

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

答案 1 :(得分:0)

对于链表反转,它非常简单,只需创建一个新的链表,将新节点放在列表的末尾(始终从第二个LList的头部遍历,直到当前节点的下一个为null,然后将pNew置于此current-&gt; next)