今天复习下链表,第一次使用js搞它,做个记录。
链表反转思路:在循环的过程中,使用了两个中间变量,来分别保存已翻转链最后一个节点和待翻转链的第一个节点。
<script>
// 测试链表
// 节点
class xiaoming{
constructor(data){
this.name = data
this.next = null
}
}
// 链表对象
class xiaomingHome{
constructor(data){
// 初始化头结点
// this.head = new xiaoming('小明0')
this.head = data
}
// 查找匹配name的第一个节点。
findeNote(name){
let xm = this.head
while (xm) {
if(xm.name == name){
return xm
}else{
xm = xm.next
if(!xm){
return '没找到!'
}
}
}
}
// 反转链表
rollback(){
let xm = this.head
let zhongjian;
let qianyige;
while (xm) {
zhongjian = xm.next
console.log('当前 1', xm)
if(qianyige){
xm.next = qianyige
console.log('前一个 1', qianyige)
}else{
xm.next = null;
}
qianyige = xm
if(!zhongjian){
this.head = xm
}
xm = zhongjian;
console.log('下一个 1', xm)
}
console.log('反转结果', this.head)
}
}
let xiaoming0; //头
let linshixiaoming; //临时小明
for(var i=0; i<5; i++){
let xm = new xiaoming('小明'+i)
if(linshixiaoming){
linshixiaoming.next = xm
linshixiaoming = xm
}else{
xiaoming0 = xm;
linshixiaoming = xm;
}
}
let lianbiao = new xiaomingHome(xiaoming0)
console.log(lianbiao)
let noteItem = lianbiao.findeNote('小明2')
console.log('00', noteItem)
lianbiao.rollback()
// let a1 = checkXiaoming(xiaoming0)
// 查看每个节点
// function checkXiaoming(xiaoming){
// if(xiaoming.next){
// checkXiaoming(xiaoming.next)
// console.log(xiaoming)
// }else{
// console.log(xiaoming)
// return 'p'
// }
// }
</script>
网友评论