题目:已知某非空线性链表第1个链结点的指针为list,请写一个算法,将链表中数据域值最大的那个链结点移至链表的末尾。
解题思路:分两步:第一步 先找到满足条件的链结点;第二步 将满足条件的链结点移至链表的末尾。这里,设数据域值最大的链结点的地址由q指出,其前驱结点由s指出,末尾结点由r指出,活动指针为p。
具体实现如下:
这里我们会用到toString(list))来打印一个线性链表出来。
这里我们会用到createLinklist(n)来建立一个线性链表出来
function remove(list) {
let q=list, r=list, p=list.link, s
while( p!=null ){
if ( p.data > q.data) {
s = q
q = p
}
r = p
p = p.link
}
if ( q!==r ) {
if ( q==list ) {
list = list.link
} else {
s.link = q.link
}
r.link = q
q.link = null
}
return list
}
var list = createLinklist(10)
console.log('创建的list为:', toString(list))
var r_list = remove(list)
console.log('移动后的链表为:', toString(r_list))