算法思想:使用两个指针first和second,只是first每次走一步,second每次走两步,这样当second达到链表尾部时,first刚好在链表的中间。
static Link GetMiddleOne(Link head) {
Link first = head;
Link second = head;
while (first != null && first.Next != null) {
first = first.Next.Next;
second = second.Next;
}
return second;
}
但是,这道题目有个地方需要注意,就是对于链表元素个数为奇数,以上算法成立。如果链表元素个数为偶数,那么在返回second的同时,还要返回second.Next也就是下一个元素,它俩都算是单链表的中间元素。 下面是加强版的算法,无论奇数偶数,一概通杀:
static void Main(string[] args) {
Link head = GenerateLink();
bool isOdd = true;
Link middle = GetMiddleOne(head, ref isOdd);
if (isOdd) {
Console.WriteLine(middle.Data);
} else {
Console.WriteLine(middle.Data);
Console.WriteLine(middle.Next.Data);
}
Console.Read();
}
static Link GetMiddleOne(Link head, ref bool isOdd) {
Link first = head;
Link second = head;
while (first != null && first.Next != null) {
first = first.Next.Next;
second = second.Next;
}
if (first != null)
isOdd = false;
return second;
}
分享到:
相关推荐
C CODE FOR :只遍历一遍找出单链表的倒数第K个节点
C语言实现:头插法创建链表,打印输出链表内容,利用快慢指针法找出链表中间元素,链表内容为奇数个时,打印中间值, 链表内容为偶数个时,打印中间两个值
头插法建立带头结点的单链表,并找出中间节点值
设head为单链表的头指针,并设单链表带有头结点,编写算法将单链表中的数组元素按照其值递增有序的顺序进行就地排列
数据结构链表的操作,单链表中重复元素的删除
如何在无序单链表内删除重复元素
【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结。。。 定义线性表节点的结构.pdf
3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并 6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。 7.单链表交换任意两个元素...
算法大全面试题数据结构单链表的13道面试题含代码 1.单链表反转 2.找出单链表的倒数第四个元素 3.找出单链表的中间元素 4...
链表,并设计一个算法, 找出单链表中元素值最大 的结点。 要求: (1)单链表的数据从键盘输入; (2)输出单链表所有结点的数据和最大值结点序号。*/ /*2. 设计算法,根据输入的学生人数和成绩建立一个单链表,并...
找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并 6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。 7.单链表交换任意两个...
基于JAVA创建单链表,并实现了在队列末尾增加、删除元素,在队列中插入、删除元素,打印链表。
删除单链表中的重复元素之保留最前面一个.cpp
单链表的相关操作 1.1:单链表增加一个元素 1.2:单链表删除指定位置的元素(删除某个元素) 1.3:单链表打印 1.4:单链表的反转 1.5:单链表找出倒数第k个节点的元素 ... 1.7:找出单链表中中间节点的值
建立一个由正整数组成的无序单链表,编写算法实现下列功能:找出最小值结点,且显示该数值;若该数值为奇数,则将其与直接后继结点的数值交换。若为偶数,则将其直接后继结点删除。
1、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。...3、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
只有链表结点定义和删除重复元素的函数实现,下载后请自行修改ElemType
1、建立含有若干个元素的单链表; 2、对已建立的单链表实现查找、逆置和计算线性表长度等操作。 void main( ) { int r[100],n,i,x; cout请输入线性表中元素的个数!"; cin>>n; cout请输入线性表中每个元素!"; ...
C++版的单链表功能;使用了类模板;有尾插法单链表,遍历单链表,单链表的长度,单链表按位查找元素,单链表按元素查找位置,单链表中插入元素,单链表中删除元素 7中功能
⑷输出单链表H的第i个元素,如输出单链表H的第3个元素; ⑸输出给定元素的位置,如输出元素a的位置; ⑹在第i个元素前插入给定元素,如在第4个元素前插入元素f; ⑺删除单链表H的第i个元素,如删除单链表H的第3...