某企业电子商务网站建设,wordpress文章名字相同的不发布,网络营销课程教案,北京网站建设公司公司目录
✿LeetCode203.移除链表元素❀
✿LeetCode707.设计链表❀
✿LeetCode206.反转链表❀ ✿LeetCode203.移除链表元素❀
链接#xff1a;203.移除链表元素 给你一个链表的头节点 head 和一个整数 val #xff0c;请你删除链表中所有满足 Node.val val 的节点#xff…目录
✿LeetCode203.移除链表元素❀
✿LeetCode707.设计链表❀
✿LeetCode206.反转链表❀ ✿LeetCode203.移除链表元素❀
链接203.移除链表元素 给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。 我的做法是设置一个虚拟头结点因为头结点的处理与其他节点不同设置了虚拟头结点就可以把头结点看成一个普通的节点移除操作只用把前一个节点的next指向当前节点的next代码如下 public ListNode removeElements(ListNode head, int val) {if(headnull){return null;}ListNode dummynew ListNode();dummy.nexthead;ListNode predummy;ListNode curhead;while(cur!null){if(cur.valval){pre.nextcur.next;}else{precur;}curcur.next;}return dummy.next;} 测试用例 1.输入一个含有值为val节点的链表 2.输入一个不含值为val节点的链表 3.输入一个只有值为val节点的链表 4.输入的只有头结点且值为val 5.输入的只有头结点且值不为val 6.输入空链表 ✿LeetCode707.设计链表❀
链接707.设计链表 你可以选择使用单链表或者双链表设计并实现自己的链表。 单链表中的节点应该具备两个属性val 和 next 。val 是当前节点的值next 是指向下一个节点的指针/引用。 如果是双向链表则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。 实现 MyLinkedList 类 MyLinkedList() 初始化 MyLinkedList 对象。int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效则返回 -1 。void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后新节点会成为链表的第一个节点。void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度那么该节点会被追加到链表的末尾。如果 index 比长度更大该节点将 不会插入 到链表中。void deleteAtIndex(int index) 如果下标有效则删除链表中下标为 index 的节点。 此题非常考验对链表的操作我做了蛮久的也需要对链表有足够的了解本题做的时候也充分体现了虚拟头结点的便利性然后就是模拟链表的操作以下是我的代码 class ListNode{int val;ListNode next;ListNode(){};ListNode(int val){this.valval;}
}
public class MyLinkedList {int size; //链表长度ListNode head; //虚拟头结点// 初始化public MyLinkedList() {size0;headnew ListNode();}// 获取元素public int get(int index) {if(index0 || indexsize){return -1;}ListNode curhead;for(int i0;iindex;i){curcur.next;}return cur.val;}// 头插public void addAtHead(int val) {addAtIndex(0,val);}// 尾插public void addAtTail(int val) {addAtIndex(size,val);}// 插在index之前public void addAtIndex(int index, int val) {ListNode curhead;if(indexsize){return;}if(index0){index0;}for(int i0;iindex;i){curcur.next;}ListNode nodenew ListNode(val);node.nextcur.next;cur.nextnode;size;}// 删除Index位置上的元素public void deleteAtIndex(int index) {if(index0 || indexsize){return;}
// if(index0){
// headhead.next;
// }ListNode curhead;for(int i0;iindex;i){curcur.next;}cur.nextcur.next.next;size--;}
}✿LeetCode206.反转链表❀
链接206.反转链表 给你单链表的头节点 head 请你反转链表并返回反转后的链表。 之前写过翻转数组是用双指针解的但是链表并不能直接获取到某个节点所以翻转链表更考验对链表的操作写链表题很容易就把自己绕进去我建议可以在草稿纸上画一下这样思路可以更清晰点ps:我画的太乱了就不粘上来了以下是我的代码 public ListNode reverseList(ListNode head) {if(headnull || head.nextnull){return head;}ListNode curhead;ListNode prenull;while(cur!null){ListNode tempcur.next;cur.nextpre;precur;curtemp;}return pre;} 测试用例 1.输入一个大于1个结点的链表 2.输入一个只有一个节点的链表 3.输入链表为空