LeetCode 203. 移除链表元素
思路:就是虚拟头结点,去遍历。
func removeElements(head *ListNode, val int) *ListNode {
dummy := &ListNode{0, head}
cur := dummy
for cur.Next != nil{
if cur.Next.Val == val{
cur.Next = cur.Next.Next
continue
}
cur = cur.Next
}
return dummy.Next
}
LeetCode 707. 设计链表
思路:虚拟头结点,但注意index不合法的问题。
type MyLinkedList struct {
Next *MyLinkedList
Val int
}
func Constructor() MyLinkedList {
return MyLinkedList{}
}
func (this *MyLinkedList) Get(index int) int {
cur := this
for i := 0; i <= index; i++{
cur = cur.Next
if cur == nil{
return -1
}
}
return cur.Val
}
func (this *MyLinkedList) AddAtHead(val int) {
next := this.Next
this.Next = &MyLinkedList{next, val}
}
func (this *MyLinkedList) AddAtTail(val int) {
cur := this
for cur.Next != nil{
cur = cur.Next
}
cur.Next = &MyLinkedList{nil, val}
}
func (this *MyLinkedList) AddAtIndex(index int, val int) {
cur := this
for i := 0; i < index; i++{
cur = cur.Next
if cur == nil{
return
}
}
next := cur.Next
cur.Next = &MyLinkedList{next, val}
}
func (this *MyLinkedList) DeleteAtIndex(index int) {
cur := this
for i := 0; i < index; i++{
cur = cur.Next
if cur.Next == nil{
return
}
}
cur.Next = cur.Next.Next
}
LeetCode 206. 反转链表
func reverseList(head *ListNode) *ListNode {
var pre *ListNode
cur := head
for cur != nil{
next := cur.Next
cur.Next = pre
pre = cur
cur = next
}
return pre
}