题目:leetcode24. 两两交换链表中的节点
描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
思路:
建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。
接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序
代码:
class ListNode {public int val;public ListNode next;public ListNode(){};public ListNode(int val){ this.val=val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}public class Solution {public ListNode swapPairs(ListNode head) {if(head==null ||head.next==null)return head;ListNode drum=new ListNode(-1);drum.next=head;ListNode cur=drum,first,second,temp;while(cur.next!=null && cur.next.next!=null){temp=cur.next.next.next;first=cur.next;second=cur.next.next;cur.next=second;second.next=first;first.next=temp;cur=first;}return drum.next;}
}