代码随想录 | Day 3 | 2023.07.28

今日题目: 

203. 移除链表元素

707. 设计链表

206. 反转链表

203.移除链表元素

要点:

1. 没啥说的,添加虚拟头节点以统一对链表元素的操作即可。

代码:

func removeElements(head *ListNode, val int) *ListNode {
    if head == nil {
        return nil
    }
    newHead := &ListNode{Val: -1, Next: head}
	pre := newHead
    for head != nil{
        if head.Val == val {
            pre.Next = head.Next
        } else {
            pre = pre.Next
        }
        head = head.Next
    }
    return newHead.Next
}

707. 设计链表

要点:

1. 考察对链表基础的理解,重点完成插入功能。

2. 分清楚链表结构体和节点结构体。

代码:

type MyLinkedList struct {
    head *ListNode
    size int
}

func Constructor() MyLinkedList {
    return MyLinkedList{&ListNode{}, 0}
}

func (l *MyLinkedList) Get(index int) int {
    if index < 0 || index >= l.size {
        return -1
    }
    cur := l.head
    for i := 0; i <= index; i++ {
        cur = cur.Next
    }
    return cur.Val
}

func (l *MyLinkedList) AddAtHead(val int) {
    l.AddAtIndex(0, val)
}

func (l *MyLinkedList) AddAtTail(val int) {
    l.AddAtIndex(l.size, val)
}

func (l *MyLinkedList) AddAtIndex(index, val int) {
    if index > l.size {
        return
    }
    index = max(index, 0)
    l.size++
    pred := l.head
    for i := 0; i < index; i++ {
        pred = pred.Next
    }
    toAdd := &ListNode{val, pred.Next}
    pred.Next = toAdd
}

func (l *MyLinkedList) DeleteAtIndex(index int) {
    if index < 0 || index >= l.size {
        return
    }
    l.size--
    pred := l.head
    for i := 0; i < index; i++ {
        pred = pred.Next
    }
    pred.Next = pred.Next.Next
}

func max(a, b int) int {
    if b > a {
        return b
    }
    return a
}

206. 反转链表

要点:

1. 题目不难 但是写一次忘一次 重点在于整理清楚当前节点与前后节点的关系

2. 要使用临时变量存放当前节点的后继节点

图片来自代码随想录,其中3号节点需要使用temp临时存放

 代码:

func reverseList(head *ListNode) *ListNode {
    cur := head
    var pre *ListNode = nil
    var temp *ListNode = nil
    for cur != nil {
        temp = cur.Next
        cur.Next = pre
        pre = cur
        cur =temp
    }
    return pre
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值