此题为力扣中等链表题目
文章目录:
1️⃣.题目解析
2️⃣.代码实现+图解
3️⃣.全部代码
题目:
1️⃣.题目解析
题目要求交换两个相邻的交点,该题需要使用一个傀儡结点在不改变结点数值的情况下实现交换,使用傀儡结点依次去把结点重新串联起来,最后返回新链表的头即可
2️⃣.代码实现+图解
步骤一、定义一个傀儡结点,由于其数值域没有任何意义,所以这里把傀儡结点的数值设置为 1
ListNode newHead = new ListNode(-1);
步骤二、设置一个 tmp 用于去遍历链表
ListNode tmp = newHead;
步骤三、将傀儡结点和原链表的头链接起来
newHead.next = head;
步骤四、判断后面串联的两个结点是否还存在,如果存在进入循环,如果后面只有一个结点或者没有结点了,循环结束
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;
图解:
3️⃣.全部代码
class Solution { public ListNode swapPairs(ListNode head) { //创建一个傀儡结点 ListNode newHead = new ListNode(-1); ListNode tmp = newHead; newHead.next = head; //分别指向前两个结点 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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)