刷题13:两两交换链表中的节点
Posted 嗯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题13:两两交换链表中的节点相关的知识,希望对你有一定的参考价值。
24. 两两交换链表中的节点
1.双指针法
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode pre = new ListNode(-1,head),temp = pre;
while(temp.next != null && temp.next.next != null){
ListNode first = temp.next;
ListNode second = temp.next.next;
first.next = second.next;
second.next = first;
temp.next = second;
temp = first;
}
return pre.next;
}
}
2.栈
每次入栈两个节点,利用栈的先进后出将两元素反转组成子链表,最后把所有链表连接即可。注意要判断链表的长度是奇数还是偶数来决定在链表尾部添加null还是剩下的最后一个节点。
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(-1,head),cur = dummy;
Stack<ListNode> st = new Stack<>();
while(head != null && head.next != null){
ListNode next = head.next.next;
st.push(head);
st.push(head.next);
ListNode popNode1 = st.pop();
ListNode popNode2 = st.pop();
popNode1.next = popNode2;
cur.next = popNode1;
head = next;
cur = popNode2;
}
if(head == null){//偶数
cur.next = null;
}else{//奇数
cur.next = head;
}
return dummy.next;
}
}
以上是关于刷题13:两两交换链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章