LeeCode-刷题日记-Day25
24. 两两交换链表中的节点
思路:迭代,通过创建一个空节点在head之前,再遍历next和next.next进行次序交换,当没有next并且没有next.next时终止循环。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var swapPairs = function(head) {
let k=new ListNode(0,head);
let p=k;
while(p.next!==null&&p.next.next!==null){
let temp=p.next;
p.next=p.next.next;
temp.next=temp.next.next;
p.next.next=temp;
p=temp;
}
return k.next;
};
707. 设计链表
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}
var MyLinkedList = function(val,next) {
this.head=null;
this.size=0;
};
/**
* @param {number} index
* @return {number}
*/
MyLinkedList.prototype.get = function(index) {
if(this.size===0) return -1;
if(index<0||index>=this.size) return -1;
let cur=this.head;
while(index>0){
cur=cur.next;
index--;
}
return cur.val;
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtHead = function(val) {
let s=new ListNode(val);
s.next=this.head;
this.head=s;
this.size++;
};
/**
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtTail = function(val) {
let s=new ListNode(val);
if(this.size===0){
this.head=s;
this.size++;
}else{
let tail = this._getItem(this.size-1);
if(!tail) return;
tail.next=s;
this.size++;
}
};
/**
* @param {number} index
* @param {number} val
* @return {void}
*/
MyLinkedList.prototype.addAtIndex = function(index, val) {
if(index>this.size) return;
let s=new ListNode(val);
if(index<=0){return this.addAtHead(val)};
if(index===this.size){return this.addAtTail(val)};
let prev=this._getItem(index-1);
s.next=prev.next;
prev.next=s;
this.size++;
};
/**
* @param {number} index
* @return {void}
*/
MyLinkedList.prototype.deleteAtIndex = function(index) {
if(this.size===0) return;
if(index<0||index>=this.size) return;
if(index===0){this.head=this.head.next};
if(index>0&&index<this.size){
let prev=this._getItem(index-1);
let next=this._getItem(index+1);
prev.next=next;
}
this.size--;
};
MyLinkedList.prototype._getItem = function (index) {
if (this.size === 0) return null;
if (index < 0 || index >= this.size) return null;
let cur = this.head;
while (index > 0) {
cur = cur.next;
index--;
}
return cur;
};
/**
* Your MyLinkedList object will be instantiated and called as such:
* var obj = new MyLinkedList()
* var param_1 = obj.get(index)
* obj.addAtHead(val)
* obj.addAtTail(val)
* obj.addAtIndex(index,val)
* obj.deleteAtIndex(index)
*/
- 本文链接:https://archer-lan.github.io/2023/11/20/LeeCode-%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0-Day25/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。