24.タイトルleetcode二十から二リンクリストにノードを切り替えます

タイトル

隣接ノードとのリストのペアごとの交換を考えると、交換にリストを返します。

あなたは、単に内部ノード値を変更しますが、実際のノード交換する必要がないことができます。

1 - > 2 - > 3 - > 4を考えると、あなたは、2-> 1 - > 4 - > 3返す必要があります。

思考

これは質問の基本的なリストである、私は結果がそうではありません見つけ書き、良いアイデアをしたいと思います。私は、そのように処理されたリスト上の次の3つのノードの前、CURを、使用少しスキル、我々は追加のノードを保存するために使用される新しい事前があり、あなたがpre.next最終リターンを返すことができ、中に心配する必要はありませんでした位置変更、不足しているヘッドノード。
ここに画像を挿入説明

コード

public class problem24 {
	
	 //Definition for singly-linked list.
	 public static class ListNode {
	     int val;
	     ListNode next;
	    ListNode(int x) { val = x; }
	 }
	 
	public ListNode swapPairs(ListNode head) {
		
		//特殊情况判断
		if(head==null) return null;
		if(head.next==null) return head;
		
		//三个指针进行反序操作
		ListNode pre=new ListNode(0);
		ListNode cur=head;
		ListNode next=cur.next;
		
		ListNode re=pre;//保存头节点,最后返回re.next即可
		
		while(cur!=null&&cur.next!=null){	
//			System.out.println("cur:"+cur.val);
			cur.next=next.next;
			next.next=cur;
			pre.next=next;
			pre=cur;
			cur=cur.next;
			//长度是偶数时会出现cur是null的情况,所以添加if进行判断,以免报错
			if(cur!=null&&cur.next!=null) next=cur.next;
		}
		
		return re.next;
    }
	public static void main(String[] args) {
		ListNode a=new ListNode(1);
		a.next=new ListNode(2);
		a.next.next=new ListNode(3);
		a.next.next.next=new ListNode(4);
		
		problem24 pro=new problem24();
		ListNode re=pro.swapPairs(a);
		while(re!=null){
			System.out.println(re.val);
			re=re.next;
		}
	}
}
2
1
4
3
公開された15元の記事 ウォンの賞賛0 ビュー178

おすすめ

転載: blog.csdn.net/qq_36360463/article/details/103996746