题目描述:
题目分析:
这道题目考察的就是链式节点的置换,但是需要注意三点:1、注意输入的链表为空时,进行判断;2、处理链表最末尾时,需要注意处理好只剩一个节点或无节点的情况;3、注意另外申请一个节点,防止生成的链表断链。
代码:
public class SwapPairs {
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode node = head;
node.next = new ListNode(2);
node = node.next;
node.next = new ListNode(3);
node = node.next;
node.next = new ListNode(4);
ListNode k = swapPairs(head);
while (k!=null){
System.out.print(k.val+"->");
k = k.next;
}
}
public static ListNode swapPairs(ListNode head) {
if (head == null)
return null;
ListNode p = head;
ListNode q = p.next;
if (p==null||q==null){
return head;
}
int count=0; //用来标记处理好第一个结点(头结点)
ListNode node = new ListNode(0); //随机申请一个结点,用来辅佐防止断链
while (p!=null&&q!=null){
p.next = q.next;
q.next = p; //这里进行的是相邻结点置换
if (count==0){
node = q;
head = node; //将head绑定在辅佐链表的头结点
node = node.next;
}else {
node.next = q; //这里是防止断链的关键
node = p; //相当于向后移动两个结点
}
p = p.next;
if (p!=null)
q = p.next;
count++;
}
return head;
}
}