能否帮我解答一下我提出的问题“如何查找单向链表中的中间结点”
这是我的面试题,面试官说没有尾节点我就不知道如何做了
能力真差,希望大家帮助,谢谢。
List *FindMid(const List *Head)
{
int i=0;
List *Tmp,*result;
if (Head->Next == NULL) return NULL;
Tmp = Head->Next;
result = NULL;
while(Tmp != Head)
{
tmp = tmp->Next;
i++;
if (i == 1 || i == 2) result = Head->Next;
else if ( i%2 == 1) result = result->Next;
}
return result;
}
思路:如果是双向链表,我们可以设置两个指针(Java中没有指针,但是引用和指针概念很像),一个从头开始遍历,一个从链表尾开始遍历,两个指针相遇的时候就是链表的中间结点。对于单链表,我们以此为基础,设置两个...
//查找链表的中间结点; //自定义的结点结构体和头指针结构体: #include #include #include #include typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode* n
下面的问题为:查找单链表的中间节点。题目分析: 链表的特点就是有很多的节点,每个节点有数据域和指针域两部分,指针域存放的是下一个节点的地址,根据地址找到下一个节点。链表只能从前到后遍历,不能从后到前...
链表结点个数为奇数个时:当快指针走到NULL前面一个结点的时候,慢指针此时刚好指向链表中间结点。 链表结点个数为偶数个时:当快指针走到NULL的时候,慢指针此时刚好指向链表中间结点。 public ListNode sortList...
要求时间复杂度O(n),且单向链表的长度未知。 思路: 快慢指针,快指针一次两步,慢指针一步,当快指针到达链表结尾时,慢指针指向的结点即为中间节点 ...
我们应该先要将即将断开部分的前后连接保存下来,也就是链表插入的第一步,将new的后继指向原始链表的中P的下一个结点。然后,将new的前驱指向P结点,这样就保证了链表的前后部分不丢失。然后是第三步,将P结点的...
1.带头结点的单向链表的结构 head指针始终指向头结点,head->data不放元素。当head->next==NULL时,链表为空表,不为空表时,head->next指向首结点,即head->next=a1。 2.单向链表带头结点和不带头结点...
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。 示例: 输入单向链表a->b->c->d->e中的节点c 结果:不返回任何数据,但该链表变为a->b->d->e 给定待删除的节点,请执行...
仅遍历一次单向链表,找出中间结点,经典C算法,
求单向链表的中间结点 需求 非空的单向链表,返回其中间节点。如果有两个中间结点,返回第二个。 链表大小控制在1~100之间。 示例1: Input: [1,2,3,4,5] Output: Node 3 from this list (Serialization: [3,4,5]) ...
class ListNode { public: int val; ListNode *next; bool removeNode(ListNode * pNode); ListNode (int x) { val = x; } }; bool ListNode::removeNode(ListNode* pNode) ... return f
由于题目中给定的链表为单向链表,访问后继元素十分容易,但无法直接访问前驱元素。因此在找出链表的中位数节点mid 之后,如果设定「左闭右开」的关系,我们就可以直接用 (left,mid) 以及(mid->next,right) 来...
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title&...script&am
设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1) #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode { ElemType data; ...
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。 示例: 输入:单向链表a->b->c->d->e->f中的节点c 结果:不返回任何数据,但该链表变为a->b-...
设计程序,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2 #include <stdio.h> #include <...
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 详细描述: 接口说明 原型: ...
完成函数dubdel的编写,该函数删除单向链表中的重复结点,如果链表中存在重复结点(除next指针外的其它数据成员的值相同)时,保留离链首最近的结点。 样例输入: 5 1 2 3 2 4 样例输出: 1 2 3 4 在这里插入代码片 ...
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3...
程序员面试一百题-09-查找单向链表中倒数第k个结点
在单向链表中插入新节点有三种情况: 1.加到第一个节点之前 2.加到最后一个节点之后 3.加到链表中间任一位置 先说1,新节点插入第一个节点之前,成为此链表的首节点:只需把新节点的指针指向链表原来的第一个节点,...
给出任意单向链表,找出并返回该链表的中间节点。 奇数长度的链表,例如:1->2->3->4->5 返回节点 3 偶长度的链表,例如:1->2->3->4->5->6 返回...
python单链表查找中间节点 使用快慢指针法 # -*- coding: UTF-8 -*- class Node: def __init__(self,data,next): self.data = data self.next = next n1 = Node('n1',None) n2 = Node('n2',n1) n3 = Node('...
给定一个非空的单链表和头节点头,返回链表的中间节点。 如果有两个中间节点,返回第二个中间节点。 解决 设置两个指针,一个快指针,每次走两步,一个慢指针,每次走一步,当快指针为空(偶数个节点)或者快指针的...
** 设计程序,给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10...
关于顺序表、单向链表和双向链表请将鼠标移步 此处点击 1.单向循环链表 代码实现: //#pragma once //作为头文件时加上这行 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef...
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 详细描述: 本题为...
/***************************************************** copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name: Author:Jerey_Jobs Version:0.1 Date: Description: ...Funcion List:
一、单向链表C语言代码 #include<stdio.h> #include<stdlib.h> //定义数据类型,假设为int typedef int ElemType; //定义自引用结构体(结点) struct node { ElemType data; struct node *next; }; ...
题目:Delete Node in a linked List描述:Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed the linked list is 1 -> 2 -> 3 -> 4 and ...