java实验编程1、 有一个长度大于2的整数单链表L,设计一个算法查找L中中间位置的元素。 2、有一个整数单链表L,其中可能存在多个值相同的结点,设计一个算法查找L中最大值结点的个数。
时间: 2024-05-19 13:14:41 浏览: 140
1、算法描述:
定义两个指针slow和fast,初始时都指向链表的头结点。
fast指针每次移动两个节点,slow指针每次移动一个节点,直到fast指针到达链表末尾。
此时,slow指针所指向的节点就是链表的中间节点。
算法实现:
public ListNode findMiddleNode(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode slow = head;
ListNode fast = head;
while(fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
2、算法描述:
定义一个变量max记录链表中的最大值,初始化为链表头结点的值,定义一个变量count记录最大值结点的个数,初始化为1。
从链表的第二个结点开始遍历,如果当前结点的值等于max,则count加1;如果当前结点的值大于max,则将max更新为当前结点的值,count重置为1。
遍历完成后,count的值即为链表中最大值结点的个数。
算法实现:
public int findMaxNodeCount(ListNode head) {
if(head == null) {
return 0;
}
int max = head.val;
int count = 1;
ListNode p = head.next;
while(p != null) {
if(p.val > max) {
max = p.val;
count = 1;
} else if(p.val == max) {
count++;
}
p = p.next;
}
return count;
}
阅读全文