反转链表middle
eg:
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
相关解法:
图解:
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @param {number} left * @param {number} right * @return {ListNode} */ var reverseBetween = function(head, left, right) { let prev = null let cur = head let next = head for(let i=1;i<left;i++){ //从1 开始 prev = cur cur = cur.next } // 保留prev和cur let prev2 = prev let cur2 = cur //反转链表 for(let i=left;i<=right;i++){ next = cur.next cur.next = prev prev = cur cur = next } //判断是否left为第一个开始 if(prev2 !== null){ //不是第一个 prev2.next = prev }else{ //是第一个 prev为反转后的第一个结点 head = prev } cur2.next = cur //反转后的最后一个结点指向cur return head };
反转链表一:easy解法:
function ReverseList(pHead) { // write code here let prev = null let cur = pHead let next = pHead while(cur){ next = cur.next cur.next = prev prev = cur cur = next } return prev //此时cur指向null next也为null }