`
wudikua123
  • 浏览: 63045 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

求链表中间节点的值,检测链表的环

 
阅读更多
求链表中间节点的值,检测链表的环

int loop(struct Node* head){
	struct Node* p1 = head;
	struct Node* p2 = head;
	int i = 0;
	while(p1 && p2){
		i++;
		if(i!=1){
			if(p1->value == p2->value){
				printf("%d\n",i);
				return 1;
			}	
		}
		p1 = p1->next;
		if(p2->next != null){
			p2 = p2->next->next;	
		}else{
			return 0;
		}
		
	}
	printf("%d\n",i);
	return 0;
}

int middle(struct Node* head){
	struct Node* p1 = head;
	struct Node* p2 = head;
	while(p2){
		p2 = p2->next;
		if(p2 != null){
			p1 = p1->next;
			p2 = p2->next;
		}
	}
	return p1->value;
}

int main(int argc,char *argv[]){
	/**
	struct Node* head = create();
	print(head);
	
	struct Node* x = malloc(sizeof(struct Node));
	x->value = 1;
	delete(x,&head);
	print(head);
	**/
	struct Node* p1 = malloc(sizeof(struct Node));
	p1->value = 1;
	struct Node* p2 = malloc(sizeof(struct Node));
	p2->value = 2;
	struct Node* p3 = malloc(sizeof(struct Node));
	p3->value = 3;
	struct Node* p4 = malloc(sizeof(struct Node));
	p4->value = 4;
	struct Node* p5 = malloc(sizeof(struct Node));
	p5->value = 5;
	p1->next = p2;
	p2->next = p3;
	p3->next = p4;
	p4->next = p5;
	p5->next = null;
	printf("中间节点数值:%d\n",middle(p1));
	return 0;	
}
分享到:
评论

相关推荐

    递归求链表中最大值、平均值、节点数

    而`head.h`则可能定义了链表节点的结构体和相关的递归函数。例如,链表节点可能定义如下: ```cpp struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ``` 递归函数的...

    数据结构 链表 查找倒数第N个节点的值 查找中间节点的值

    4. **查找中间节点**:查找并返回链表的中间节点的值。 #### 三、创建链表 在`CreateList`函数中,程序首先要求用户输入链表的长度,然后创建一个头节点,并将其`next`字段设置为`NULL`。接着,通过一个循环,每次...

    初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点

    数据结构 初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点

    c语言编程题之链表操作链表的中间节点.zip

    在C语言编程中,链表是一种非常重要的数据结构,它不同于数组,不需要预先分配连续的内存空间,而是通过节点间的...本压缩包提供的编程题目就是一个很好的实践机会,通过实际编写代码来加深对链表中间节点查找的理解。

    Java 单向链表 插入与删除节点

    这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。

    给定链表中间节点指针,删除中间节点的方法

    这个方法的关键在于,它利用了链表节点的数据交换特性,而不是传统的通过前一个节点来修改`next`指针的方式。这种方法对于单链表中没有前向引用的情况非常有用。然而,需要注意的是,此方法不适用于删除链表的最后一...

    数据结构c语言版链表删除重复节点

    一个简单的链表节点通常包括两个部分:数据域(用于存储数据)和指针域(用于链接到下一个节点)。在C语言中,这可以表示为: ```c typedef struct Node { int data; // 数据域,这里假设节点存储整型数据 struct...

    单向链表结点的逐个删除-C语言教程

    在C语言中,我们首先需要定义链表节点的数据结构。通过结构体(struct)来实现这一点。示例代码如下: ```c #include "stdio.h" #include "stdlib.h" struct node { int num; // 数据域,存储整型数据 struct ...

    002-FreeRTOS202212-4001-链表头节点(根节点)初始化

    最后,将链表项结构体`xListEnd`的前一个链表项和下一个链表项的指针设置为指向自己,以便在链表为空时能够检测出来。 在链表头节点的初始化过程中,还需要初始化链表结构的其他字段,如链表项的所有者`pvOwner`和...

    C++删除链表中间节点的方法

    在C++中,我们可以定义一个结构体`Node`来表示链表节点,其中包含一个整型数据`data`和一个指向下一个节点的指针`next`: ```cpp typedef struct Node{ int data; struct Node* next; } node, *pLinkedList; ``` ...

    链表节点类

    在本场景中,我们讨论的是一个名为“链表节点类”的实现,它专门用于管理链表中的节点指针,并提供了两种不同的节点提取方式:先入先出(FIFO,First In First Out)和遍历提取。 首先,`NodeQueue`可能是实现了一...

    双向链表通用管理程序(添加节点、删除节点等等)

    尤其是,当用链表描述不同的数据结构时,节点结构体的定义都是不同的,这就需要为每一种链表都写一套诸如插入、删除节点之类的操作代码。 本程序就是为了解决这个问题,将双向链表的基本操作写成了一套通用程序,...

    华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++).html

    华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法

    链表-插入节点

    数据结构经典算法演示,这里是链表-插入节点的代码演示

    一次遍历查找单向链表的中间结点

    // 查找链表中间结点 Node* findMiddleNode(Node* head) { Node* slow = head; Node* fast = head; if (head != NULL) { fast = fast->next; } while (fast != NULL && fast->next != NULL) { slow = slow-...

    算法__链表的操作

    2. **选择头部节点**:比较两个链表头部节点的值,选取较小者作为新链表的头部,然后递归地调用 `MergeRecursive` 函数,处理后续的链表节点。 3. **递归调用**:如果 `head1` 的值小于 `head2`,则 `head1` 成为新...

    递归链表中值最大的节点

    根据给定文件的信息,本文将围绕“递归链表中值最大的节点”这一主题进行深入探讨,主要包括链表的基本概念、链表的遍历与插入操作、递归查找链表中最大值节点的方法以及示例代码分析。 ### 链表的基本概念 链表是...

    删除链表的节点1

    `ListNode`结构体定义了链表节点的数据结构,包括一个整型值`val`和一个指向下一个节点的指针`next`。`ListNode(int x)`构造函数用于初始化一个新的节点,给定的参数`x`将被赋值给`val`,`next`初始设为`nullptr`。 ...

Global site tag (gtag.js) - Google Analytics