// 将一个数组转为链表[1,2] => {value:1,next:next}{value:2,next:null}
function init(arr) {
if (arr.length == 0) {
return null;
}
let head = {
value: arr[0],
next: null
};
let tail = head;
for(let i = 1; i < arr.length; i++) {
let current = {
value: arr[i],
next: null
};
tail.next = current
tail = current;
}
return head;
}
// 打印链表内容
function print(pHead) {
let h = pHead;
let str = ''
while(h != null) {
str += h.value + ', ';
h = h.next;
}
console.log(str);
}
// 单向链表反转123 => 321
function reverse(pHead) {
if(!pHead) return pHead;
let next = pHead.next
let newHead = pHead;
newHead.next = null;
while(next) {
let current = next;
next = next.next;
current.next = newHead;
newHead = current;
}
return newHead;
}
// check 单向链表是否对称12321
function check(pHead) {
// console.log('----------------begin')
if(!pHead || pHead.length == 0) {
// console.log('[] is null')
return true
}
// print(pHead);
// print(reverse(pHead));
let mid = pHead
let tail = pHead.next
while(tail){
mid = mid.next
tail = tail.next
if(tail) {
tail = tail.next
}
}
mid = reverse(mid)
// print(mid)
while(pHead && mid){
if(pHead.value != mid.value) {
return false;
}
pHead = pHead.next
mid = mid.next
}
return true;
}
// 测试用例
console.log(check(init([])) == true);
console.log(check(init([1])) == true);
console.log(check(init([1,1])) == true);
console.log(check(init([1,4,1])) == true);
console.log(check(init([1,4,5,4,1])) == true);
console.log(check(init([1,4])) == false);
console.log(check(init([1,4,5])) == false);
单向链表对称性判断
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 第177篇 人体结构的对称性与不对称性 原创同人四圣弘医2019-04-18 以身体从头到脚的中心的连接线把人体分...
- Java实现有环的单向链表,并判断单向链表是否有环 有一个单向链表,链表当中有可能出现环,就像下图这样。我们如何判...