Tag: 单链接列表

在C中的链表上插入排序?

我试过寻找类似于我的问题,但没有找到太多帮助。 我有这种结构的链表: struct PCB { struct PCB *next; int reg1, reg2; }; 我首先创建10个以这种方式链接在一起的PCB结构: for(i=20;ireg1 = i; curr->next = head; head = curr; } 然后我需要再创建20个PCB结构,但是需要使用rand()生成它们的reg1值。 我正在这样做: for (j = 0;jreg1 = rand()%100; curr->next = head; head = curr; } 但是,当使用随机reg1值将这些PCB结构插入到链表中时,我需要按顺序将它们插入到链表中(插入排序)。 在单链接链表中处理此问题的最佳方法是什么? 谢谢 编辑:我现在正在跟踪第一个创建的结构,以便能够从头开始循环链接列表: // create root struct to keep track of beginning of linked list root […]

在c中递归地反转链表

当head作为参数发送给它时,以下代码可以正常工作。 因为我是C的新手,我无法理解它是如何工作的。 请帮帮我。 struct node *recursiveReverseLL(struct node *list) { struct node *revHead; if (list == NULL || list->link == NULL) { return list; } revHead = recursiveReverseLL(list->link); list->link->link = list; list->link = NULL; return revHead; } 我不知道如何使用这些递归调用提供链接。 即)如果链接为, 1 -> 2 -> 3 -> 4 然后hw被改变为, 4 -> 3 -> 2 -> 1

交换单链表中的节点

我试图交换两个节点。 例如,如果节点是a和b我正在传递指针 (a-1)->next和(b-1)->next ,它们基本上是节点a和b 。 void swap(struct stack **a,struct stack **b) { struct stack *temp1 = *a, *temp2 = *b, *temp3 = *b; *a = *b; (*b)->next = (temp1)->next; temp2 = temp1; (temp2)->next = temp3->next; } 我究竟做错了什么? 当我在调用函数后尝试打印节点时,它是一个无限循环。 请帮忙。