Tag: linked list

在C中创建单链表

我正在尝试从输入文本文件创建单个链接列表以进行分配。 我试图一次做一点,所以我知道我的代码不完整。 我尝试创建头指针,只是打印出它的值,我甚至无法让它工作,但我不知道为什么。 我包括了struct,我的创建列表和打印列表函数。 由于该部分有效,我没有包含打开的文件。 typedef struct List { struct List *next; /* pointer to the next list node */ char *str; /* pointer to the string represented */ int count; /* # of occurrences of this string */ } LIST; LIST *CreateList(FILE *fp) { char input[LINE_LEN]; LIST *root; /* contains root of list */ […]

正确的方式加入两个双链表

在Linux内核源代码中, list_splice使用__list_splice实现: static inline void __list_splice(const struct list_head *list, struct list_head *prev, struct list_head *next) { struct list_head *first = list->next; // Why? struct list_head *last = list->prev; first->prev = prev; prev->next = first; last->next = next; next->prev = last; } list已经指向链表的头部? 为什么我们需要取下list->next ?

typedef结构清晰度

我对typedef感到困惑,任何人都可以将其转录为正常的构图吗? 结构? 我真的不想处理typedef因为它让我感到困惑 struct stackNode { int data; struct stackNode *nxtptr; }; typedef struct stackNode StackNode; typedef StackNode *StackNodePtr; 是 typedef struct stackNode StackNode; 与struct stackNode StackNode和typedef StackNode *StackNodePtr; 与被struck stackNode *StackNodePtr相同?

交换链表中的节点

我正在尝试交换链表中的两个相邻节点,我想我理解如何使用临时节点来实现它。 这是我的struct swap函数 struct part { char* name; float price; int quantity; struct part *next; }; typedef struct part partType; partType *swap_node(partType **item) { partType *temp; temp = *item; *item = (*item)->next; temp->next = (*item)->next; (*item)->next = temp; return *item; } 我想不出如何使列表中的前一个节点指向新的交换节点。 我需要另一个临时变量吗? 另外,如何解释要交换的两个节点是列表中的前两个节点的情况。

C编程链接列表删除位置N处的节点

编辑:找出问题所在。 此外,如果你通过谷歌或其他搜索引擎发现这是我出错的地方以及如何解决它。 我的deleteNode()方法正确地使用正确的temp移动列表并保持头部不变。 我出错的地方是因为该方法的结果我正在返回。 我正在返回temp或newNode,这是不正确的,因为它通过列表直到找到定义的位置。 一旦找到定义的位置,它就会重新分配 – > next指针指向next-> next>指针,这是正确的,但我又回到了错误的位置。 因为我们使用temp / NewNode移动了列表,所以我们丢失了标题,我们返回了我们找到的位置以及列表中下一个位置的任何位置。 我们如何解决这个问题就是返回头部(这是传递给方法的内容)。 这之所以有效,是因为我们必须了解LinkedLists的工作原理。 每个节点的指针指向下一个节点。 防爆。 我们有一个链表| A | | – | B | | – | C | | – | D | | – | E | | – | F | | 如果我们要删除Node C,我们使用temp指针移动到节点B,然后在temp-> next-> next旁边分配B->从而跳过C节点并分配D节点。 注意:(据我所知,这实际上并没有释放C节点的内存,所以这不是最佳实践,因为你可以通过这种方式导致内存泄漏)你应该在C节点上使用free()方法。 这是我最终使用的代码 struct node* DeleteNode(struct […]

下一个结构项,不完整类型

struct node{ struct node next; int id; } 给出“下一个字段有不完整的类型错误”。 这个结构有什么问题?

在C中对链表进行排序

我试图通过找到最大值,从其位置删除它,然后将其插入列表顶部来对链表进行排序。 我遇到的困难是实际删除和插入顶部。 问题似乎是在sortList函数中包含的while循环中的if条件,但我不确定如何修复它。 任何帮助,将不胜感激。 #include #include typedef struct node{ int num; struct node *next; } Node, *NodePtr; void printList(NodePtr np); NodePtr makeList(void); NodePtr makeNode(int n); NodePtr sortList(NodePtr list); int main(void) { NodePtr list; printf(“Enter numbers for the list (0 to end)\n”); list = makeList(); printList(list); list = sortList(list); printList(list); return 0; } NodePtr makeList(void) { […]

在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