单链表翻转
leetcode206
递归
public ListNode
reverseList(ListNode head
) {
if(head
== null
|| head
.next
== null
)
return head
;
ListNode rever
= reverseList(head
.next
);
head
.next
.next
= head
;
head
.next
= null
;
return rever
;
}
非递归
public static Node
Traversing(Node root
) {
if(root
==null
)
return null
;
Node preNode
= null
;
Node curNode
= root
;
Node nextNode
=null
;
while(curNode
!=null
) {
nextNode
= curNode
.next
;
curNode
.next
=preNode
;
preNode
=curNode
;
curNode
= nextNode
;
}
return preNode
;
}
两两交换链表中的节点
public ListNode
swapPairs(ListNode head
) {
ListNode dummyHead
= new ListNode(-1);
dummyHead
.next
= head
;
ListNode q
= dummyHead
;
while(q
.next
!= null
&& q
.next
.next
!= null
) {
ListNode node1
= q
.next
;
ListNode node2
= node1
.next
;
ListNode nnext
= node2
.next
;
node2
.next
= node1
;
node1
.next
= nnext
;
q
.next
= node2
;
q
= node1
;
}
return dummyHead
.next
;
}
K 个一组翻转链表
class Solution {
public ListNode
reverseKGroup(ListNode head
, int k
) {
if(head
== null
)
return null
;
ListNode dummyHead
= new ListNode(-1);
dummyHead
.next
= head
;
ListNode pre
= dummyHead
;
ListNode end
= dummyHead
;
while(end
.next
!= null
) {
for(int i
= 0; i
< k
&& end
!= null
; i
++) {
end
= end
.next
;
}
if(end
== null
)
break;
ListNode start
= pre
.next
;
ListNode pnext
= end
.next
;
end
.next
= null
;
pre
.next
= reverse(start
);
start
.next
= pnext
;
pre
= start
;
end
= pre
;
}
return dummyHead
.next
;
}
private ListNode
reverse(ListNode head
) {
ListNode pre
= null
;
ListNode cur
= head
;
while(cur
!= null
) {
ListNode pnext
= cur
.next
;
cur
.next
= pre
;
pre
= cur
;
cur
= pnext
;
}
return pre
;
}
}
转载请注明原文地址: https://mac.8miu.com/read-497057.html