网站后台统计,滁州网站公司,wordpress弹登陆界面,微博推广方式剑指 Offer 18. 删除链表的节点、21. 调整数组顺序使奇数位于偶数前面、22. 链表中倒数第k个节点、25. 合并两个排序的链表、52. 两个链表的第一个公共节点、57. 和为s的两个数字、58 - I. 翻转单词顺序
题目描述#xff1a; [18] 给定单向链表的头指针和一个要删除的节点的值…剑指 Offer 18. 删除链表的节点、21. 调整数组顺序使奇数位于偶数前面、22. 链表中倒数第k个节点、25. 合并两个排序的链表、52. 两个链表的第一个公共节点、57. 和为s的两个数字、58 - I. 翻转单词顺序
题目描述 [18] 给定单向链表的头指针和一个要删除的节点的值定义一个函数删除该节点。 返回删除后的链表的头节点。 [21] 输入一个整数数组实现一个函数来调整该数组中数字的顺序使得所有奇数在数组的前半部分所有偶数在数组的后半部分。 [22] 输入一个链表输出该链表中倒数第k个节点。为了符合大多数人的习惯本题从1开始计数即链表的尾节点是倒数第1个节点。 例如一个链表有 6 个节点从头节点开始它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。 [25] 输入两个递增排序的链表合并这两个链表并使新链表中的节点仍然是递增排序的。 [52] [57] 输入一个递增排序的数组和一个数字s在数组中查找两个数使得它们的和正好是s。如果有多对数字的和等于s则输出任意一对即可。 [58 - I] 输入一个英文句子翻转句子中单词的顺序但单词内字符的顺序不变。为简单起见标点符号和普通字母一样处理。例如输入字符串I am a student. “则输出student. a am I”。
考察重点 第18题一个指针匹配目标删除节点一个节点记录该节点的上一位便于删除 第21题使用leftright分别指向数组左右分别搜索偶数与奇数二者分别指向目标节点后交换二者位置直到 leftright 第22题slow指针从首节点开始quick指针向后移k位当quick指向末尾slow即指向倒数第k位 第25题合并链表每次比较两链表头结点并将小的节点加入结果链表直到遍历完成两链表 第52题假设两链表长度分别为A和B则有ABBA,即分别用两指针从两链表头结点开始向后移动分别到达末尾处后则从另一链表头结点重新开始向后移动则二者必会在交点处相交 第57题使用slow记录其中一个结果数字二分法在slow之后查找第二个结果数字 第58 - I题slow记录每个单词起始位置quick记录每个单词终止位置遍历整个字符串
第18题
func deleteNode(head *ListNode, val int) *ListNode {temp : ListNode{}temp.Next headlay : temp // lay延迟一位负责在head找到目标节点时执行删除操作for head ! nil{if head.Val val{lay.Next lay.Next.Nextreturn temp.Next}lay headhead head.Next}return temp.Next
}第21题
func isOdd(num int)bool{return num % 2 1
}
func change(nums []int, a, b int){temp : nums[a]nums[a] nums[b]nums[b] temp
}
func exchange(nums []int) []int {left, right : 0, len(nums) - 1for left right{for left right isOdd(nums[left]){left }for left right !isOdd(nums[right]){right --}if left right{change(nums, left, right) }}return nums
}第22题
func getKthFromEnd(head *ListNode, k int) *ListNode {quick, slow : head, headfor i : 0;i k;i {quick quick.Next}for quick ! nil{slow slow.Next;quick quick.Next;}return slow;
}第25题
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {res : ListNode{}temp : resfor l1 ! nil || l2 ! nil{if l1 nil{ // 任意一方为空则将另一方的全部元素加入结果链表尾部res.Next l2break}if l2 nil{res.Next l1break}if l1.Val l2.Val{res.Next l1res res.Nextl1 l1.Next}else{res.Next l2res res.Nextl2 l2.Next}}return temp.Next
}第52题
func getIntersectionNode(headA, headB *ListNode) *ListNode {if headA nil || headB nil{return nil}tempA, tempB : headA, headBfor headA ! headB{headA headA.NextheadB headB.Nextif headA nil headB nil{break}if headA nil{headA tempB}if headB nil{headB tempA}}return headA
}第57题
func twoSum(nums []int, target int) []int {slow, nLen : 0, len(nums)for slow nLen{left, right : slow 1, nLen - 1for left right{mid : left (right - left) / 2if nums[mid] target - nums[slow]{return []int{nums[slow], nums[mid]}}else if nums[mid] target - nums[slow]{left mid 1}else{right mid - 1}}slow }return []int{}
}第58 - I题
func reverseWords(s string) string {res : for slow : 0;slow len(s);{if s[slow] {slow continue}quick : slow 1for ;quick len(s);quick {if s[quick] {break}} if len(res) 0{res s[slow:quick]}else{res s[slow:quick] res}slow quick 1}return res
}