class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public class Solution {
public ListNode swapPairs1(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode q = head.next;
head.next = swapPairs1(q.next);
q.next = head;
return q;
}
public ListNode swapPairs2(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode first = head.next;
ListNode q;
while (head != null && head.next != null){
q = head.next.next;
head.next.next = head;
if(q != null && q.next != null)
head.next = q.next;
else
head.next = q;
head = q;
}
return first;
}
public static ListNode swapPairs3(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
ListNode curr = dummyHead;
while (curr.next != null && curr.next.next != null) {
ListNode node1 = curr.next;
ListNode node2 = curr.next.next;
ListNode next = node2.next;
node2.next = node1;
node1.next = next;
curr.next = node2;
curr = node1;
}
return dummyHead.next;
}
static public void print(ListNode head){
while (head != null){
System.out.print(head.val + " ");
head = head.next;
}
System.out.println();
}
public static void main(String[] args){
ListNode one = new ListNode(1);
ListNode two = new ListNode(2);
ListNode three = new ListNode(3);
ListNode four = new ListNode(4);
ListNode five = new ListNode(5);
one.next = two;
two.next = three;
three.next = four;
four.next = five;
ListNode result1 = new Solution().swapPairs1(one);
print(result1);
ListNode result2 = new Solution().swapPairs2(result1);
print(result2);
ListNode result3 = new Solution().swapPairs3(result2);
print(result3);
}
}
将单链表中相邻两节点对换
最新推荐文章于 2022-06-22 10:53:29 发布