c - 旋转链接列表

标签 c

我想旋转包含数字的链接列表。 123 应该旋转到 231。函数创建了 23 但最后一个字符保持为空,为什么?

typedef struct node node;  
struct node{
    char digit;
    node* p;
};

void rotate(node** head){

    node* walk= (*head);
    node* prev= (*head);
    char temp= walk->digit;

    while(walk->p!=NULL){

        walk->digit=walk->p->digit;

        walk= walk->p;
        }

    walk->digit=temp;
}

如何创建列表:

node* convert_to_list(int num){ 
   node * curr, * head;

   int i=0,length=0; 

   char *arr=NULL;

   head = NULL;

   length =(int) log10(((double) num))+1;
   arr =(char*) malloc((length)*sizeof(char));          //allocate memory 

   sprintf (arr, "%d" ,num); //(num, buf, 10);

    for(i=length;i>=0;i--) {
      curr = (node *)malloc(sizeof(node));
      (curr)->digit =  arr[i];
      (curr)->p = head;
      head = curr;
   }

   curr = head;

   return curr;
}

最佳答案

您的链接列表实际上有 4 个元素。

您应该更改此行:

for(i = length; i >= 0 ; i--) {

至:

for(i = length - 1; i >= 0; i--) {

因为在前一行中,您将离开数组(您将在第一次迭代时访问 arr[length])。

通过此更改,您的 rotate 函数可以正常工作。

关于c - 旋转链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057729/

相关文章:

c++ - 指针指向指针的实际用途?

c++ - OpenGL 示例中 WinMain 错误的重新定义

c - 不会打印字符串。字符数组

c++ - 编译多源程序文件时,MinGW 是否创建目标文件?

无法通过 strcpy 从参数复制到 char 数组

c - movl 的左操作数有 3 个子操作数?

c - 剖析 C 代码 R

c - 如何比较 C 中的字符串的条件

c++ - 如何使用 PortAudio 和 OpenCV 避免不一致的音频播放?

c - C 中的反转字符