网站建设岗位能力评估表,建站平台 discuz,wordpress怎么导入html,网站建设教程学校编写程序以 x 为基准分割链表#xff0c;使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x#xff0c;x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可#xff0c;其不需要被置于左右两部分之间。
示例:
输入: head …编写程序以 x 为基准分割链表使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 xx 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可其不需要被置于左右两部分之间。
示例:
输入: head 3-5-8-5-10-2-1, x 5 输出: 3-1-2-10-5-5-8
一趟分离然后连起来即可。
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/
func partition(head *ListNode, x int) *ListNode {if head nil{return nil}dummnyhead1,dummnyhead2 : ListNode{-1,nil},ListNode{-1,nil}cur1,cur2 : dummnyhead1,dummnyhead2cur : headfor cur ! nil{if cur.Val x{cur1.Next curcur cur.Nextcur1 cur1.Next}else if cur.Val x{cur2.Next curcur cur.Nextcur2 cur2.Next}}cur2.Next nilcur1.Next dummnyhead2.Nextreturn dummnyhead1.Next
} 给定两个用链表表示的整数每个节点包含一个数位。
这些数位是反向存放的也就是个位排在链表首部。
编写函数对这两个整数求和并用链表形式返回结果。 示例
输入(7 - 1 - 6) (5 - 9 - 2)即617 295 输出2 - 1 - 9即912 进阶假设这些数位是正向存放的请再做一遍。
示例
输入(6 - 1 - 7) (2 - 9 - 5)即617 295 输出9 - 1 - 2即912
模拟竖式计算即可。
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {up:0;ans: ListNode{-1,nil};temp:ans;for l1!nil || l2!nil{a,b:0,0;if(l1!nil){al1.Val;} if(l2!nil){bl2.Val;}temp.NextListNode{(abup)%10,nil};upint((abup)/10);temptemp.Next;if(l1!nil){l1l1.Next;}if(l2!nil){l2l2.Next;}}if(up!0){temp.NextListNode{up,nil};}return ans.Next;
} 编写一个函数检查输入的链表是否是回文的。 示例 1
输入 1-2 输出 false 示例 2
输入 1-2-2-1 输出 true
其实最优解应该原地反转一半判断完再反转回去我这个题是为了连一下go的列表。
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/
func isPalindrome(head *ListNode) bool {s:make([]int,0)for head!nil{s append(s, head.Val)headhead.Next}for i:0;i len(s)/2;i{if s[i]!s[len(s)-1-i]{return false}}return true
} 给定两个单向链表判定它们是否相交并返回交点。请注意相交的定义基于节点的引用而不是基于节点的值。换句话说如果一个链表的第k个节点与另一个链表的第j个节点是同一节点引用完全相同则这两个链表相交。 示例 1
输入intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出Reference of the node with value 8 输入解释相交节点的值为 8 注意如果两个列表相交则不能为 0。从各自的表头开始算起链表 A 为 [4,1,8,4,5]链表 B 为 [5,0,1,8,4,5]。在 A 中相交节点前有 2 个节点在 B 中相交节点前有 3 个节点。
思路调到长度一样以后看能否走到一样的节点即可。
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/
func getIntersectionNode(headA, headB *ListNode) *ListNode {a,b:0,0;for temp:headA;temp!nil;temptemp.Next{a;}for temp:headB;temp!nil;temptemp.Next{b;} if(ab){for i:a-b;i0;i--{headAheadA.Next;}}else if(ab){for i:b-a;i0;i--{headBheadB.Next;}}for headA!nil headB!nil{if(headAheadB){return headA;}headAheadA.Next;headBheadB.Next;}return nil;
}