代码随想录打卡 Day3

203 移除链表元素

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

707 设计链表

type MyLinkedList struct {
    Node *Node
}

type Node struct{
    Val int
    Next *Node
    Prev *Node
}

func Constructor() MyLinkedList {
    node := &Node{
        Val: -1,
        Next: nil,
        Prev: nil,
    }
    node.Next = node
    node.Prev = node
    return MyLinkedList{node}
}


func (this *MyLinkedList) Get(index int) int {
    node := this.Node.Next
    for index > 0 && node.Next != this.Node{
        index--
        node = node.Next
    }
    if(index != 0){
        return -1
    }
    return node.Val
}


func (this *MyLinkedList) AddAtHead(val int)  {
    node := &Node{
        Val: val,
        Next: this.Node.Next,
        Prev: this.Node,
    }
    this.Node.Next.Prev = node
    this.Node.Next = node
}


func (this *MyLinkedList) AddAtTail(val int)  {
    node := &Node{
        Val: val,
        Next: this.Node,
        Prev: this.Node.Prev,
    }
    this.Node.Prev.Next = node
    this.Node.Prev = node
}


func (this *MyLinkedList) AddAtIndex(index int, val int)  {
    if(index < 0){
        node := &Node{
        Val: val,
        Next: this.Node.Next,
        Prev: this.Node,
    }
    this.Node.Next.Prev = node
    this.Node.Next = node
    }
    a := this.Node.Next 
    for index > 0 && a!=this.Node{
        a = a.Next
        index--
    } 
    if(index == 0){
        b := &Node{
            Val: val,
            Next: a,
            Prev: a.Prev,
        }
        a.Prev.Next = b
        a.Prev = b
    }
}


func (this *MyLinkedList) DeleteAtIndex(index int)  {
    if(index < 0){
        return
    }
    a := this.Node.Next
    for index > 0 && a.Next != this.Node{
        a = a.Next
        index--
    }
    if(index == 0){
        a.Prev.Next = a.Next
        a.Next.Prev = a.Prev
    }
}

206 反转链表

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    var cur,prev *ListNode
    cur = head
    for cur != nil{
        tmp := cur.Next
        cur.Next = prev
        prev = cur
        cur = tmp
    }
    return prev
}

简要总结 :

203的题比较简单,设置了一个虚结点就好做了,707的题思路比较快,但一直没有完全通过,其中的边界问题需要仔细考虑,尤其是Get、AddAt、Delete这三个部分的边界,而且题意说的是索引。206比较基础,没啥好说的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值