钓鱼网站开发教程,如何做彩票网站推广图,wordpress内容页标题,大连有什么好玩的地方leetcode 150道题 计划花两个月时候刷完#xff0c;今天#xff08;第二十四天#xff09;完成了4道(55-58)150#xff1a;
55.#xff08;19. 删除链表的倒数第 N 个结点#xff09;题目描述#xff1a;
给你一个链表#xff0c;删除链表的倒数第 n 个结点#xff…leetcode 150道题 计划花两个月时候刷完今天第二十四天完成了4道(55-58)150
55.19. 删除链表的倒数第 N 个结点题目描述
给你一个链表删除链表的倒数第 n 个结点并且返回链表的头结点。第一版我记得这个有个快慢指针但是就是不知道咋做第一版还是求出长度后找出要删除的去删除。
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode temphead;int len0;// 求出长度while(temp!null){len;temptemp.next;}// 删除 倒数 第 n 个lenlen-n;ListNode dumpHeadnew ListNode(0);dumpHead.nexthead;tempdumpHead;while(temp!null){if(len0temp.next!null){ListNode removetemp.next;temp.nextremove.next;break;}len--;temptemp.next;}return dumpHead.next;}
}第二版快慢指针给快指针先走 n次 题目里的倒数的 n次当快指针到最后一个时候慢指针刚好就是要删除的前一个指针了
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dumpHeadnew ListNode(0);dumpHead.nexthead;ListNode lowdumpHead;ListNode fastdumpHead;while(fast!nulln0){n--;fastfast.next;}while(fast!nullfast.next!null){fastfast.next;lowlow.next;}if(low.next!null){low.nextlow.next.next;}return dumpHead.next;}
}56.82. 删除排序链表中的重复元素 II题目描述
给定一个已排序的链表的头 head 删除原始链表中所有重复数字的节点只留下不同的数字 。返回 已排序的链表 。
输入head [1,2,3,3,4,4,5]
输出[1,2,5]第一版算是模拟出来的。。
class Solution {public ListNode deleteDuplicates(ListNode head) {// 只要是 head 第一个节点可能会被删除就可以选择新增一个辅助节点避免ListNode dumpHeadnew ListNode(2000);dumpHead.nexthead;ListNode resdumpHead;ListNode preNodedumpHead;while(res!null){if(res.nextnull)break;ListNode tempres.next;while(temp!nulltemp.valres.val){temptemp.next;}// 不相等说明当前res节点到temp之前的都要删除的if(res.next!temp){res.nexttemp;preNode.nexttemp;}else{// 记录上一个节点preNoderes;}resres.next;}return dumpHead.next;}
}57.61. 旋转链表题目描述
给你一个链表的头节点 head 旋转链表将链表每个节点向右移动 k 个位置第一版这个其实和第一个差不多相当于找出来倒数第几个节点然后截断作为头连接上原来链表的头
class Solution {public ListNode rotateRight(ListNode head, int k) {ListNode temphead;int len0;ListNode lastNodehead;while(temp!null){len;lastNodetemp;temptemp.next;}if(len1||k%len0){return head;}k%len;len-k;temphead;for(int i0;ilen-1;i){temptemp.next;}ListNode res temp.next;temp.nextnull;lastNode.nexthead;return res;}
}58.86. 分隔链表题目描述
给你一个链表的头节点 head 和一个特定值 x 请你对链表进行分隔使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。第一版这个我真的想了很久。。虽然写出来了但是还是一坨只要你舍得用变量链表的都还可以
class Solution {public ListNode partition(ListNode head, int x) {ListNode dumpHeadnew ListNode(-2000,head);ListNode tempdumpHead;ListNode preNodedumpHead;while(temp!null){if(temp.valx){break;}// 这个是记录后面的数据小于x的要插入的头节点preNodetemp;temptemp.next;}// 这个 lastPreNode 是记录下半段的后面把小于 x 的 节点要放到 //第一个PreNode 的前面导致 链表断开了所以记录一下再连接起来ListNode lastPreNodepreNode;while(temp!null){ListNode tempNexttemp.next;if(temp.valx){ListNode nextpreNode.next;temp.nextnext;preNode.nexttemp;preNodepreNode.next;lastPreNode.nexttempNext;}else{lastPreNodetemp;}temptempNext;}return dumpHead.next;}
}第二版看了解题我感觉我真的是傻逼。。
class Solution {public ListNode partition(ListNode head, int x) {ListNode smallHeadnew ListNode(0);ListNode smallTempsmallHead;ListNode largeHeadnew ListNode(0);ListNode largeTemplargeHead;while(head!null){if(head.valx){smallTemp.nexthead;smallTempsmallTemp.next;}else{largeTemp.nexthead;largeTemplargeTemp.next;}headhead.next;}smallTemp.nextlargeHead.next;largeTemp.nextnull;return smallHead.next;}
}链表真的不是我说有点难的。。如果不会了可以多搞几个变量可能会稍微清晰一点。
第二十四天啦为跳好槽而 leetcode