小编Sam*_*Sam的帖子

是否可以反转包含循环的链表?

我正在看一些面试问题,其中一个问题是要反转一个包含循环的链表.所以假设我有一个如下链接列表:

          F <- E
          |    /\
          V    |
A -> B -> C -> D 
Run Code Online (Sandbox Code Playgroud)

然后反转列表将创建以下内容:

          F -> E
         /\    |
          |    V
A <- B <- C <- D
Run Code Online (Sandbox Code Playgroud)

这里的问题是节点C应该指向哪个之间存在冲突.那么我们会消除C和F之间的联系吗?

algorithm linked-list data-structures

8
推荐指数
1
解决办法
1706
查看次数

在C解决方案segfaulting中反转一个字符串

我在C中提出了以下解决方案来反转字符串:

#include <stdio.h>

void reverse(char * head);

void main() {

  char * s = "sample text";
  reverse(s);
  printf("%s", s);
}

void reverse(char * head) {

  char * end = head;
  char tmp;

  if (!head || !(*head)) return;

  while(*end) ++end;

  --end;

  while (head < end) {
    tmp = *head;
    *head++ = *end;
    *end-- = tmp;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我的解决方案是segfaulting.根据GDB,违规行如下:

*head++ = *end;
Run Code Online (Sandbox Code Playgroud)

在while循环的第一次迭代中,行segfaults.end指向字符串"t"的最后一个字符,head指向字符串的开头.那么为什么这不起作用呢?

c string reverse segmentation-fault

5
推荐指数
2
解决办法
820
查看次数