题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f

//1.构建单向链表数据结构
//2.完成insert函数
//3.完成delete函数
//4.根据输入完成单向链表构建
//5.删除操作

package main

import "fmt"

//1.构建单向链表数据结构
type Single struct {
	Value int
	Next  *Single
}

//2.完成insert函数
func (s *Single) Insert(value int, position int) {
	cur := s
	for cur != nil {
		if cur.Value == position {
			temp := cur.Next
			cur.Next = &Single{
				Value: 0,
				Next:  nil,
			}
			cur.Next.Value = value
			cur.Next.Next = temp
		}
		cur = cur.Next
	}
}

//3.完成delete函数
//找到值为value的点,将其前一节点直接连到其下一节点
//如果value为头节点?
//如果value为尾节点?
func (s *Single) Delete(value int) (result *Single) {
	if s.Value == value {
		return s.Next
	}

	cur := s
	for cur.Next != nil {
		if cur.Next.Value == value {
			if cur.Next.Next == nil {
				cur.Next = nil

				return s
			} else {
				cur.Next = cur.Next.Next
				return s
			}
		}
		cur = cur.Next
	}
	return nil
}

func main() {
	//4.根据输入完成单向链表构建
	var n int
	var head int

	var value, position int
	var del int

	fmt.Scan(&n)
	fmt.Scan(&head)

	var singleList Single
	singleList.Value = head
	s := &singleList
	for i := 0; i < n-1; i++ {
		fmt.Scan(&value)
		fmt.Scan(&position)
		s.Insert(value, position)
	}

	fmt.Scan(&del)
	singleList.Delete(del)

	cur := &singleList
	for cur.Next != nil {
		fmt.Print(cur.Value, " ")
		cur = cur.Next
	}
	fmt.Println(cur.Value)

}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务