cur := p0.next pre := nullptr for cur in area; do nxt := cur.next cur.next = pre pre = cur cur = nxt end loop // one loop only change one "next" // end loop, cur is next node for this area at the time p0.next.next=cur // set next pointer of the reversed area's last node p0.next=pre // previous node's next pointer points to the first node
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ funcreverseKGroup(head *ListNode, k int) *ListNode { cnt := 0 for p:=head;p!=nil;p=p.Next{ cnt++ } dummy := &ListNode{0,head} p0 := dummy for ; cnt>=k ; cnt-=k { cur := p0.Next var pre *ListNode nextp := p0.Next for i:=0;i<k;i++{ nxt := cur.Next cur.Next = pre pre = cur cur = nxt } p0.Next.Next=cur p0.Next = pre p0=nextp } return dummy.Next }