假设我有字符串“Lamps”,它会被传递到我的程序中,每个字符都存储在链表中的一个节点中. 我需要使用另一个链接列表以相反的顺序复制该列表,我该怎么做,我已经相当远了,但我如何在
我需要使用另一个链接列表以相反的顺序复制该列表,我该怎么做,我已经相当远了,但我如何在链表中向后移动?
您将看到该行评论我需要在链接列表中向后移动的内容.
#include <stdlib.h> #include <stdio.h> struct NODE { struct NODE *next; char data; }; int main(int argc, char *argv[]) { int i; struct NODE *head; struct NODE *current; struct NODE *head2; struct NODE *current2; struct NODE *finger; for(i = 0; i < argc; i++) printf("arg %d: %s\n", i, argv[i]); head = (struct NODE*)malloc(sizeof(struct NODE)); current = head; for ( i = 0; i < sizeof(argv[1]) - 1; i++ ) { current -> data = argv[1][i]; current -> next = (struct node*)malloc(sizeof(struct NODE)); current = current -> next; current -> next = NULL; } head2 = (struct NODE*)malloc(sizeof(struct NODE)); current2 = head2; while ( current != head) { finger = head; while (finger -> next != current) finger = finger -> next; current2 -> data = current -> data; current2 -> next = (struct node*)malloc(sizeof(struct NODE)); current2 = current2 -> next; // move backwards } // ends loop } return 0; }
How do I move backwards in the (singly) linked list ?
你没有.将一个列表反转为另一个列表的技巧是插入目标列表的头部而不是后部.您需要按照常规方式遍历原始列表,方法是遵循下一个指针,而不是将元素添加到目标列表的末尾,创建新节点,并用它替换目标的标题.
这是一个循序渐进的插图:
sourceHead -> "A" -> "B" -> "C" -> NULL your pointer ^ targetHead -> NULL sourceHead -> "A" -> "B" -> "C" -> NULL your pointer ^ targetHead -> "A" -> NULL sourceHead -> "A" -> "B" -> "C" -> NULL your pointer ^ targetHead -> "B" -> "A" -> NULL sourceHead -> "A" -> "B" -> "C" -> NULL your pointer ^ targetHead -> "C" -> "B" -> "A" -> NULL