首页 > 编程语言 >代码随想录算法训练营第3天 | leetcode203、leetcode707、leetcode206

代码随想录算法训练营第3天 | leetcode203、leetcode707、leetcode206

时间:2023-12-03 12:55:25浏览次数:43  
标签:index leetcode707 MyLinkedList int 随想录 leetcode203 ListNode Next ptr

(本合集全部为Go语言实现)

相关文章链接:203题解 707题解 206题解
相关视频链接:

Leetcode203

状态:秒了
实现过程中的难点:链表遍历一定要记得指针后移。另外,在头指针前加入一个新的临时头节点可以统一整个遍历过程,否则需要先确定初始时两指针的状态

个人写法

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeElements(head *ListNode, val int) *ListNode {
  tmpHead := &ListNode{-1, head}
  pre, post := tmpHead, head
  for post != nil {
    if post.Val == val {
      pre.Next = post.Next
      post = pre.Next
    } else {
      pre = pre.Next
      post = pre.Next
    }
  }
  return tmpHead.Next
}

Leetcode707

状态:稍微有点耗时间
实现过程中的难点:注意节点增删时指针指向变化的正确性

个人写法

type MyLinkedList struct {
  Size int
  Head *Node
}

type Node struct {
    Val int
    Next *Node
}

func Constructor() MyLinkedList {
  return MyLinkedList{0, &Node{-1, nil}}
}

func (this *MyLinkedList) Get(index int) int {
  if index >= this.Size {
    return -1
  }
  ptr := this.Head
  for i := 0; i < index; i++ {
      ptr = ptr.Next
  }
  return ptr.Next.Val
}

func (this *MyLinkedList) AddAtHead(val int)  {
  newNode := &Node{val, this.Head.Next}
  this.Head.Next = newNode
  this.Size++
}

func (this *MyLinkedList) AddAtTail(val int)  {
  ptr := this.Head
  for ptr.Next != nil {
    ptr = ptr.Next
  }
  ptr.Next = &Node{val, nil}
  this.Size++
}


func (this *MyLinkedList) AddAtIndex(index int, val int)  {
  if index > this.Size {
      return
  }
  ptr := this.Head
  for i := 0; i < index; i++ {
      ptr = ptr.Next
  }
  newNode := &Node{val, ptr.Next}
  ptr.Next = newNode
  this.Size++
}


func (this *MyLinkedList) DeleteAtIndex(index int)  {
  if index >= this.Size {
      return
  }
  ptr := this.Head
  for i := 0; i < index; i++ {
      ptr = ptr.Next
  }
  ptr.Next = ptr.Next.Next
  this.Size--
}

Leetcode206

状态:基本秒了
实现过程中的难点:需要明确节点的可访问性,如果需要用到的节点将访问不到,那么就利用临时指针变量保存

个人写法

func reverseList(head *ListNode) *ListNode {
  tmpHead := &ListNode{-1, head}
  var newHead *ListNode = nil
  for tmpHead.Next != nil {
    tmp := tmpHead.Next
    tmpHead.Next = tmpHead.Next.Next
    tmp.Next = newHead
    newHead = tmp
  }
  return newHead
}

今日收获

  • 熟悉了链表问题在处理类似遍历的问题时指针变化的方式,以后会更加注意

学习时长:2小时左右

标签:index,leetcode707,MyLinkedList,int,随想录,leetcode203,ListNode,Next,ptr
From: https://www.cnblogs.com/geJoyo/p/17872851.html

相关文章

  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    LeetCode24.两两交换链表中的节点题目链接:LeetCode24思路:交换结点前将cur后第一个结点和第三个结点进行保存,然后修改cur指向头节点后再修改头节点后的结点classSolution{public:ListNode*swapPairs(ListNode*head){ListNode*dummyHead=newListNo......
  • 代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表
    LeetCode 203.移除链表元素视频链接:LeetCode203思路:根据链表的性质,将目标值对应的节点保存在一个临时节点中,再重新设置cur下一个节点,再将临时节点进行删除classSolution{public:ListNode*removeElements(ListNode*head,intval){//删除头节点......
  • 代码随想录day4链表2
    day424.两两交换链表中的节点19.删除链表的倒数第N个节点面试题02.07.链表相交142.环形链表II总结资料来源:代码随想录(programmercarl.com)5.两两交换链表中的节点classSolution{private:/*data*/public:Solution(/*args*/);~Solution();......
  • 代码随想录day3链表1
    链表理论基础203.移除链表元素707.设计链表206.反转链表资料来源:代码随想录(programmercarl.com)1链表理论基础定义:是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。......
  • 代码随想录day2
    977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II,总结1有序数组的平方​ 给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。2长度最小的子数组给定一个含有n个正整数的数组和一个正整数s,找出该数组中满......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    LeetCode704二分查找题目链接:LeetCode704左闭右闭:视频讲解:手把手带你撕出正确的二分法思路:在循环条件中注明left<=right,即[left,right]classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0,right=nums.size()-1......
  • 代码随想录-哈希
    242.有效的字母异位词https://leetcode.cn/problems/valid-anagram/description/classSolution{public:boolisAnagram(strings,stringt){if(s.size()!=t.size())returnfalse;inthash[26]={0};for(inti=0;i<s.size......
  • 代码随想录-链表
    203.移除链表元素https://leetcode.cn/problems/remove-linked-list-elements/description//***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):......
  • 代码随想录-数组
    704.二分查找https://leetcode.cn/problems/binary-search/description/classSolution{public:intsearch(vector<int>&nums,inttarget){intleft=0;intright=nums.size()-1;while(left<=right){......
  • 代码随想录算法训练营第十一天 | ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻
    今日学习的内容●20.有效的括号varisValid=function(s){letstack=[];for(leti=0;i<s.length;i++){lettemp=s[i];if(temp=='('){stack.push(')')continue;}if(......