链表
206. 反转链表
题目的意思就是给一个链表,将其反转即可
思路
设置保护节点 help空指针,我们让头指针指向help
cur next
nil 1 =>2=>3=>4=>5=>null
help null<=1<=2
help
for cur != nil{
next := cur.Next
cur.Next = help
help = cur
cur = next
}
return help
题目的意思给一组链表,给一个整数k,让链表按k个一组进行反转
思路
- 将链表分组,往后遍历k-1步为一组,head&end
- 组内做反转(单链表反转)
- 维护组间的关系
func reverseKGroup(head *ListNode, k int) *ListNode {
protect:=&ListNode{Val:0,Next:head}
pre:=protect
for head!=nil{
end:=getEnd(head,k)
if end == nil{
break
}
nextGrpHead:=end.Next
reverseList(head,nextGrpHead)
pre.Next = end
head.Next = nextGrpHead
pre = head
head = nextGrpHead
}
return protect.Next
}
func getEnd(head * ListNode,k int) *ListNode{
for head!=nil{
k--
if k == 0{
return head
}
head = head.Next
}
return nil
}
func reverseList(head * ListNode,nxtGrpH * ListNode){
help:=head
head = head.Next
for head!=nxtGrpH{
next:=head.Next
head.Next = help
help = head
head = next
}
}
21. 合并两个有序链表
将两个链表按照升序的条件进行合并
思路
过滤器+双指针+保护节点
head
p=>1=>1=>2=>3=>4=>4
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
head:=&ListNode{Val:0,Next:nil}
p:=head
for (list1!=nil || list2!=nil ){
if (list2 == nil || (list1!=nil &&list1.Val<list2.Val)){
head.Next = list1
list1 = list1.Next
}else{
head.Next = list2
list2 = list2.Next
}
head = head.Next
}
return p.Next
}
141. 环形链表
判断一个链表有没有环
思路
快慢指针
func hasCycle(head *ListNode) bool {
fast:=head
for (fast != nil && fast.Next != nil){
head = head.Next
fast = fast.Next.Next
if (fast == head){
return true
}
}
return false
}

浙公网安备 33010602011771号