对单链表还不熟悉的朋友,可以参考这篇文章顺序表 和 链表 - 单向链表部分
这个题目不好讲,我直接将代码 和 解析图 给你们,需要你们自己多琢磨。当然一些重要代码部分我会注释一下!
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next== null){
return head;
}
ListNode newHead = head.next;
head.next = swapPairs(newHead.next);
newHead.next = head;
return newHead;
}
}
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode newHead = new ListNode();
newHead.next = head;
ListNode tmp = newHead;
while(tmp.next!=null && tmp.next.next!=null){
ListNode node1 = tmp.next;
ListNode node2 = tmp.next.next;
tmp.next = node2;
node1.next = node2.next;
node2.next = node1;
tmp = node1;
}
return newHead.next;
}
}
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
Stack<ListNode> stack = new Stack<>();// 创建 栈
ListNode p = new ListNode();// 新建一个节点
ListNode cur = head;// 创建 一个 head头节点替身,去遍历数组
head = p;// 将 head 重新指向 一个 节点,也就是说上面cur成为了真正的头节点
while(cur!=null && cur.next!=null){
stack.add(cur);// 入栈
stack.add(cur.next);// 入栈
cur = cur.next.next;// 旧链表的头节点 向后移动2位,旧链表的头节点不重要,丢了就丢了
p.next = stack.pop();// 出栈, 将旧链表的两个节点"交换"后,原先的第二个节点取出。
p = p.next; //将其接入 新链表当中
p.next = stack.pop();// 出栈, 将 旧链表的两个节点"交换"后,原先的第一个节点取出。
p= p.next;//将其接入 新链表当中
}
if(cur!=null){// 节点为奇数的情况,那么需要将最后一个节点,接入新链表中
p.next = cur;
}else{// 节点为偶数的情况,那么需要将最后一个节点的next 置为 null
p.next = null;
}
return head.next;// 最后返回 头节点的next
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/DarkAndGrey/article/details/122029500
内容来源于网络,如有侵权,请联系作者删除!