1.输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
function printListFromTailToHead(head)
{
var arr=[];
if(!head){
return arr;
}
while(head){
arr.unshift(head.val);
head=head.next;
}
return arr;
}
2.输入一个链表,输出该链表中倒数第k个结点。
function FindKthToTail(head, k)
{
if(!head || k <= 0) {
return false;
}
var p1 = head;
var p2 = head;
//先将p1指针后移K-1位
for(var i=1; i<k; i++) {
if(p1.next) {
p1 = p1.next;
}else {
return false;
}
}
//两个同时移动,当p1到链表结尾处时,p2指向的就是链表的倒数第K个位置
while(p1.next) {
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
3.输入一个链表,反转链表后,输出新链表的表头。
//让节点的下一节点指向自身,第一个节点指向null
function ReverseList(pHead)
{
if(pHead == null) {
return false;
}
var p1 = pHead;
var p2 = null, temp = null;
while(p1) {
temp = p1.next;
p1.next = p2;
p2 = p1;
p1 = temp;
}
return p2;
}
4.输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
function Merge(pHead1, pHead2)
{
if(!pHead1){
return pHead2;
}
if(!pHead2){
return pHead1;
}
//创建一个新的链表,判断另两个链表值大小插入,使用递归。
var result=new ListNode(0);
if(pHead1.val<=pHead2.val){
result=pHead1;
result.next=Merge(pHead1.next,pHead2);
}else{
result=pHead2;
result.next=Merge(pHead1,pHead2.next);
}
return result;
}
5.创建链表
function listNode(val){
this.val=val;
this.next=null;
}
6.计算链表长度
function length(head){
var len=0;
while(head){
len++;
head=head.next;
}
return len;
}