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

package main

import (
	"fmt"
)

type ListNode1 struct {
	Val  int
	Next *ListNode1
}

func (l *ListNode1) Insert(insertVal, beforeVal int) {
	for n := l; n != nil; n = n.Next {
		// fmt.Printf("l.Val, val: %v\n", l.Val)
		if n.Val == beforeVal {
			// fmt.Printf("matched, val: %v\n", n.Val)

			node := ListNode1{
				Val:  insertVal,
				Next: n.Next,
			}

			n.Next = &node

			break
		}
	}

	// fmt.Printf("List: %s\n", l.String())
}

func (l *ListNode1) DeleteByVal(val int) {
	if l != nil && l.Val == val && l.Next != nil {
		*l = *l.Next
	}

	// fmt.Printf("new list: %s\n", l.String())

	for n := l; n != nil; n = n.Next {
		if n.Next != nil && n.Next.Val == val {
			n.Next = n.Next.Next
		}
	}

	// fmt.Printf("new list3: %s\n", l.String())
}

func (l *ListNode1) String() string {
	r := ""

	for n := l; n != nil; n = n.Next {
		r += fmt.Sprintf("%v ", n.Val)
	}

	return r
}

func main() {
	var nodeCount int
	fmt.Scan(&nodeCount)
	// fmt.Printf("nodeCount: %v\n", nodeCount)

	var headVal int
	fmt.Scan(&headVal)
	// fmt.Printf("nodeVal: %v\n", headVal)

	var nodeList = ListNode1{Val: headVal}

	currNodeCount := 1
	for currNodeCount < nodeCount {
		var insertVal, beforeVal int
		fmt.Scan(&insertVal, &beforeVal)
		// fmt.Printf("insertVal: %v, beforeVal: %v\n", insertVal, beforeVal)

		nodeList.Insert(insertVal, beforeVal)
		currNodeCount++
	}

	var deleteVal int
	fmt.Scan(&deleteVal)

	nodeList.DeleteByVal(deleteVal)
	// fmt.Printf("new list2: %s\n", nodeList.String())

	fmt.Printf("%s\n", nodeList.String())
}

全部评论

相关推荐

04-02 16:49
门头沟学院 Java
_bloodstream_:我也面了科大讯飞,主管面的时候听说急招人优先考虑能尽快实习的,我说忙毕设,后面就一直没消息了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务