网站开发可行性分析报告范文,黄页网络的推广,精品网站建设费用磐石网络,长沙网站设计开发删除排序链表的重复元素I
https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/
一个循环就可以了#xff0c;如果当前节点和下一个节点值一样#xff0c;当前节点不移动让next后移动一个#xff0c;如果不一样则当前节点后移。 一个循环就可以…删除排序链表的重复元素I
https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/
一个循环就可以了如果当前节点和下一个节点值一样当前节点不移动让next后移动一个如果不一样则当前节点后移。 一个循环就可以了如果当前节点和下一个节点值一样当前节点不移动让next后移动一个如果不一样则当前节点后移。
class Solution {public ListNode deleteDuplicates(ListNode head) {if(headnull)return head;ListNode cur head;while(cur.next!null){if(cur.valcur.next.val)cur.nextcur.next.next;elsecurcur.next;}return head;}
}删除排序链表的重复元素II
https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/ 学习到的新思想
1、当不想要某个节点时可以先找到前置节点然后cur.nextcur.next.next这样子前面一个节点.next就可以跳过这个节点了不再需要删除节点再定义两个节点了。为什么不能curcur.next;cur的空间始终存在cur.next只是把空间指向了下一个节点罢了。
PS:当前指针不好改内存.next指向的改变才是关键所在
2、当某个值得节点都不想要的时候不要每一次都两个节点进行比较看是不是两个节点的值一样。可以先开一个变量记录下来节点的值然后再用1就可以把所有节点全删了。
class Solution {public ListNode deleteDuplicates(ListNode head) {if(headnull) return null;ListNode dummyNode new ListNode(0,head);ListNode cur dummyNode;//为什么可以指两次其实如果不存在.next.next这个节点也不用删掉不是吗//这样子的变动是在链表head上面进行的//这里有一步很妙先拿一个变量记录下来当前节点然后就可以直接抛弃当前所有//节点不要在两个节点进行比较while(cur.next!nullcur.next.next!null){int val cur.next.val;if(cur.next.valcur.next.next.val)while(cur.next!nullcur.next.valval)cur.nextcur.next.next; elsecur cur.next;}return dummyNode.next;}
}自己的写法单循环双节点计数法先得到前面一个节点和当前节点然后找到计数为1并且前后两个节点值不一样的位置双节点再移动又臭又长。
class Solution {public ListNode deleteDuplicates(ListNode head) {if(headnull) return null;//可能会有表头节点全部删除完了的情况我们依旧采用虚拟节点的写法ListNode dummyNode new ListNode(0,head);ListNode pre dummyNode;ListNode cur dummyNode.next;//删除节点让pre指向下一个满足条件的节点即可int flag 1;//计数器flag为1时候就可以赋值了while(cur.next!null){if(cur.valcur.next.val){flag;cur.nextcur.next.next;}else{ if(flag1){pre.nextcur;curcur.next;prepre.next; }else{curcur.next;flag1; }}}if(flag1) pre.nextcur;else pre.nextnull;return dummyNode.next;}
}优化了一下过程
class Solution {public ListNode deleteDuplicates(ListNode head) {if(headnull) return null;ListNode dummyNode new ListNode(0,head);ListNode pre dummyNode;ListNode cur head;while(cur!nullcur.next!null){if(cur.valcur.next.val){int val cur.val;while(cur!nullcur.valval)curcur.next;}else{pre.nextcur;prepre.next;curcur.next;}}pre.nextcur;return dummyNode.next;}
}